vue.js数据绑定的方法(单向、双向和一次性绑定)


Posted in Javascript onJuly 13, 2017

这两天学习了vue.js数据绑定这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。

前言

感觉 vue 的很多方面的内容,都参考了 angular 的东西,数据绑定方面,更是赤裸裸的“抄袭”。对照来看,更有助于我们学习和理解框架本身透露出来的思想,而非框架本身。

一、单向绑定

(一)Mustache 语法,双大括号 {{}}(html 内字符串绑定)

<div id="app">
  <p>{{text}}</p>
</div>

<script>
  var app = new Vue({
    el: '#app',
    data: {
      text: 'text content'
    }
  });
</script>

但是,这种双大括号语法,只能用于 html 内部的字符串,不能用于绑定 html 的属性(如 title、disabled、checked 等),angular亦如是。

(二)v-bind 指令(html 属性绑定)

<div id="app">
  <p title={{title}}></p>
  <p v-bind:title="title">title属性绑定,html属性不能使用双大括号形式绑定,只能使用v-bind指令</p>
  <p :title="title">“:” 是 “v-bind” 的快捷方式</p>
</div>

<script>
  var app = new Vue({
    el: '#app',
    data: {
      title: 'title content'
    }
  });
</script>

某些框架如 Ember.js 支持在 html 属性上面使用双大括号语法,如 title={{title}},但是如果像上面,在 vue.js 的 html 属性上使用这种语法,框架本身就会报错,如下图所示:

vue.js数据绑定的方法(单向、双向和一次性绑定)

上面的报错,除了提示不能使用双大括号语法以外,还告诉我们可以使用 v-bind 或者 shorthand,也就是 v-bind 的缩写 :。这一点上,vue 还是和 angular 的 ng-bind 非常相似。

一次性绑定

<div id="app">
  <p v-once>{{once}}</p>
</div>

<script>
  var app = new Vue({
    el: '#app',
    data: {
      once: 'once content'
    }
  });

  app.once = 'changed content';
</script>

原本 angular 不支持一次性绑定的,而过分的使用数据绑定,将严重影响应用性能,angular 中 bindonce 这个第三方模块解决了这个问题。而 vue 通过 v-once 实现了框架本身对一次性绑定的原生支持。

## 不进行 html 转义
<div id="app">
  <p v-html="html">不转义的绑定(直接输出 html)</p>
</div>

<script>
  var app = new Vue({
    el: '#app',
    data: {
      html: '<div>div element</div>'
    }
  });
</script>

出于安全考虑,默认的数据绑定,会进行转义操作,屏蔽掉 html 标签。使用 v-html 指令,可以实现对文本内容不转义输出。这里的输出会替换掉目标标签的 innerHTML 代码中 p 标签中原本的文本将被替换,angular 中也有类似的 ng-bind-html。

双向绑定

<div id="app">
  <div>{{input}}</div>
  <textarea v-model="input"></textarea>
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      input: 'two-way-binding'
    }
  });
</script>

跟 angular 一模一样,双向绑定依赖于 v-model 指令。修改 textarea 中的内容的时候, {{input}} 将让内容同步更新到对应的 div 元素中。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 类定义的4种方法
Sep 12 Javascript
DOM Scripting中的图片切换[兼容Firefox]
Jun 12 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
Nov 23 Javascript
jQuery之过滤元素操作小结
Nov 30 Javascript
AngularJS初始化过程分析(引导程序)
Dec 06 Javascript
Node.js巧妙实现Web应用代码热更新
Oct 22 Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 Javascript
百度多文件异步上传控件webuploader基本用法解析
Nov 07 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
May 27 Javascript
纯JavaScript实现实时反馈系统时间
Oct 26 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 Javascript
vue通过点击事件读取音频文件的方法
May 30 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
Jul 13 #Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
Jul 13 #Javascript
解决Vue页面固定滚动位置的处理办法
Jul 13 #Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
Jul 13 #Javascript
Angular如何引入第三方库的方法详解
Jul 13 #Javascript
详解如何构建Angular项目目录结构
Jul 13 #Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
Jul 13 #Javascript
You might like
PHPEXCEL 使用小记
2013/01/06 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
基于jQuery架构javascript基础体系
2011/01/01 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
easy_install python包安装管理工具介绍
2013/02/10 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
社会保险接收函
2014/01/12 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
学校文明单位申报材料
2014/05/06 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
nginx中proxy_pass各种用法详解
2021/11/07 Servers
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL