它通过一些特殊的html语法,将DOM和数据绑定起来。
一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应地更新。
本文的Demo和源代码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星!v-for Demo | v-bind Demo | Page Demo | GitHub SourceMVVM模式下图不仅概括了MVVM模式(Model-View-ViewModel),还描述了在Vue.js中ViewModel是如何和View以及Model进行交互的。
ViewModel是Vue.js的核心,它是一个Vue实例。
当创建了ViewModel后,双向绑定是如何达成的呢?首先,我们将上图中的DOM Listeners和Data Bindings看作两个工具,它们是实现双向绑定的关键。
从View侧看,ViewModel中的DOM Listeners工具会帮我们监测页面上DOM元素的变化,如果有变化,则更改Model中的数据;从Model侧看,当我们更新Model中的数据时,Data Bindings工具会帮我们更新页面中的DOM元素。
Hello World示例了解一门语言,或者学习一门新技术,编写Hello World示例是我们的必经之路。
这段代码在画面上输出”Hello World!”。
{{ message }}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
{{ message }}
使用Vue的过程就是定义MVVM各个组成部分的过程的过程。
定义View 定义Model 创建一个Vue实例或”ViewModel”,它用于连接View和Model在创建Vue实例时,需要传入一个选项对象,选项对象可以包含数据、挂载元素、方法、模生命周期钩子等等。
在这个示例中,选项对象的el属性指向View, el: ‘#app’ 表示该Vue实例将挂载到…这个元素;data属性指向Model, data: exampleData 表示我们的Model是exampleData对象。
Vue.js有多种数据绑定的语法,最基础的形式是文本插值,使用一对大括号语法,在运行时 {{ message }} 会被数据对象的message属性替换,所以页面上会输出”Hello World!”。
Vue.js已经更新到2.0版本了,但由于还不是正式版,本文的代码都是1.0.25版本的。
双向绑定示例MVVM模式本身是实现了双向绑定的,在Vue.js中可以使用 v-model 指令在表单元素上创建双向数据绑定。
{{ message }}
1 2 3 4 5
{{ message }}
将message绑定到文本框,当更改文本框的值时,
{{ message }}
中的内容也会被更新。
反过来,如果改变message的值,文本框的值也会被更新,我们可以在Chrome控制台进行尝试。
Vue实例的data属性指向exampleData,它是一个引用类型,改变了exampleData对象的属性,同时也会影响Vue实例的data属性。
Vue.js的常用指令上面用到的 v-model 是Vue.js常用的一个指令,那么指令是什么呢?Vue.js的指令是以v-开头的,它们作用于html元素,指令提供了一些特殊的特性,将指令绑定在元素上时,指令会为绑定的目标元素添加一些特殊的行为,我们可以将指令看作特殊的html特性(attribute)。
Vue.js提供了一些常用的内置指令,接下来我们将介绍以下几个内置指令:v-if指令v-show指令v-else指令v-for指令v-bind指令v-on指令Vue.js具有良好的扩展性,我们也可以开发一些自定义的指令,后面的文章会介绍自定义指令。
v-if指令v-if 是条件渲染指令,它根据表达式的真假来删除和插入元素,它的基本语法如下:v-if=”expression” 1 v – if = “expression”expression是一个返回bool值的表达式,表达式可以是一个bool属性,也可以是一个返回bool的运算式。
例如:
Hello, Vue.js!
Yes!
No!
= 25″>Age: {{ age }}
= 0″>Name: {{ name }}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Hello, Vue.js!
Yes!
No!
= 25″ > Age: {{ age }}
= 0″ > Name: {{ name }}
注意:yes, no, age, name这4个变量都来源于Vue实例选项对象的data属性。
这段代码使用了4个表达式:数据的 yes 属性为true,所以”Yes!”会被输出;属性为true,所以”Yes!”会被输出; 数据的 no 属性为false,所以”No!”不会被输出;属性为false,所以”No!”不会被输出; 运算式 age >= 25 返回true,所以”Age: 28″会被输出;返回true,所以”Age: 28″会被输出; 运算式 name.indexOf(‘jack’) >= 0 返回false,所以”Name: keepfool”不会被输出。
注意:v-if指令是根据条件表达式的值来执行元素的插入或者删除行为。
为了再次验证这一点,可以在Chrome控制台更改age属性,使得表达式 age >= 25 的值为false,可以看到
Age: 28
元素被删除了。
age是定义在选项对象的data属性中的,为什么Vue实例可以直接访问它呢?这是因为每个Vue实例都会代理其选项对象里的data属性。
v-show指令v-show 也是条件渲染指令,和v-if指令不同的是,使用 v-show 指令的元素始终会被渲染到HTML,它只是简单地为元素设置css的style属性。
Hello, Vue.js!
Yes!
No!
= 25″>Age: {{ age }}
= 0″>Name: {{ name }}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Hello, Vue.js!
Yes!
No!
= 25″ > Age: {{ age }}
= 0″ > Name: {{ name }}
在Chrome控制台更改age属性,使得表达式 age >= 25 的值为false,可以看到
Age: 24
元素被设置了style=”display:none”样式。
v-else指令可以用 v-else 指令为 v-if 或 v-show 添加一个“else块”。
v-else 元素必须立即跟在 v-if 或 v-show 元素的后面——否则它不能被识别。
= 25″>Age: {{ age }}
Name: {{ name }}
———————分割线———————
= 0″>Name: {{ name }}
Sex: {{ sex }}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
= 25″ > Age: {{ age }}
Name: {{ name }}
———————分割线———————
= 0″ > Name: {{ name }}
Sex: {{ sex }}
v-else 元素是否渲染在HTML中,取决于前面使用的是 v-if 还是 v-show 指令。
这段代码中 v-if 为true,后面的 v-else 不会渲染到HTML; v-show 为tue,但是后面的 v-else 仍然渲染到HTML了。
v-for指令v-for 指令基于一个数组渲染一个列表,它和JavaScript的遍历语法相似:v-for=”item in items” 1 v – for = “item in items”items是一个数组,item是当前被遍历的数组元素。
前端开发者丨Vue.js
评论前必须登录!
注册