
- VueJS 教程
- VueJS - 首页
- VueJS - 概述
- VueJS - 环境搭建
- VueJS - 简介
- VueJS - 实例
- VueJS - 模板
- VueJS - 组件
- VueJS - 计算属性
- VueJS - 侦听器
- VueJS - 数据绑定
- VueJS - 事件
- VueJS - 渲染
- VueJS - 过渡与动画
- VueJS - 指令
- VueJS - 路由
- VueJS - Mixins
- VueJS - 渲染函数
- VueJS - 响应式接口
- VueJS - 示例
- VueJS 有用资源
- VueJS - 快速指南
- VueJS - 有用资源
- VueJS - 讨论
VueJS - 数据绑定
本章将学习如何操作或赋值给HTML属性,更改样式,并使用VueJS提供的v-bind指令绑定类。
让我们来看一个例子,了解为什么我们需要以及何时使用v-bind指令进行数据绑定。
示例
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <div id = "databinding"> {{title}}<br/> <a href = "hreflink" target = "_blank"> Click Me </a> <br/> <a href = "{{hreflink}}" target = "_blank">Click Me </a> <br/> <a v-bind:href = "hreflink" target = "_blank">Click Me </a> <br/> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#databinding', data: { title : "DATA BINDING", hreflink : "http://www.google.com" } }); </script> </body> </html>
在上面的例子中,我们显示了一个标题变量和三个锚链接。我们还从数据对象中为href赋值。
现在,如果我们在浏览器中查看输出并检查,我们会看到前两个锚链接的href没有正确显示,如下面的截图所示。

第一个clickme显示href为hreflink,第二个显示为{{hreflink}},而最后一个显示了我们需要的正确url。
因此,要为HTML属性赋值,我们需要使用v-bind指令进行绑定,如下所示。
<a v-bind:href = "hreflink" target = "_blank">Click Me </a>
VueJS还为v-bind提供了简写,如下所示。
<a :href = "hreflink" target = "_blank">Click Me </a>
如果我们在浏览器中查看元素检查,锚标签不会显示v-bind属性,但是,它会显示纯HTML。当我们检查DOM时,不会看到任何VueJS属性。
绑定HTML类
要绑定HTML类,我们需要使用v-bind:class。让我们来看一个例子并将其中的类绑定起来。
示例
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <style> .active { background: red; } </style> <div id = "classbinding"> <div v-bind:class = "{active:isactive}"><b>{{title}}</b></div> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#classbinding', data: { title : "CLASS BINDING", isactive : true } }); </script> </body> </html>
这里创建了一个带有v-bind:class="{active: isactive}"的div。
这里,isactive是一个基于true或false的变量。它会将active类应用于div。在data对象中,我们将isactive变量赋值为true。在样式中定义了一个.active类,其背景颜色为红色。
如果变量isactive为true,则会应用颜色,否则不会。浏览器中的输出如下所示。

在上面的显示中,我们可以看到背景颜色为红色。类"active"已应用于div。
现在,让我们将变量的值更改为false并查看输出。isactive变量更改为false,如下面的代码所示。
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <style> .active { background: red; } </style> <div id = "classbinding"> <div v-bind:class = "{active:isactive}"><b>{{title}}</b></div> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#classbinding', data: { title : "CLASS BINDING", isactive : false } }); </script> </body> </html>

在上面的显示中,我们可以看到active类没有应用于div。
我们还可以使用v-bind属性为HTML标签赋值多个类。
示例
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <style> .info { color: #00529B; background-color: #BDE5F8; } div { margin: 10px 0; padding: 12px; } .active { color: #4F8A10; background-color: #DFF2BF; } .displayError{ color: #D8000C; background-color: #FFBABA; } </style> <div id = "classbinding"> <div class = "info" v-bind:class = "{ active: isActive, 'displayError': hasError }"> {{title}} </div> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#classbinding', data: { title : "This is class binding example", isActive : false, hasError : false } }); </script> </body> </html>
对于上面的代码中的div,我们应用了一个普通类,例如class="info"。根据isActive和hasError变量,其他类将应用于div。
输出

这是一个应用的普通类。目前两个变量都是false。让我们将isActive变量设置为true并查看输出。

在上面的显示中,在DOM中我们可以看到两个类分配给div,info和active。让我们将hasError变量设置为true,并将isActive设置为false。

现在,当我们在上面的显示中看到时,info和displayError类被应用于div。这就是我们根据条件应用多个类的方法。
我们也可以将类作为数组传递。让我们来看一个例子来理解这一点。
示例
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <style> .info { color: #00529B; background-color: #BDE5F8; } div { margin: 10px 0; padding: 12px; font-size : 25px; } .active { color: #4F8A10; background-color: #DFF2BF; } .displayError{ color: #D8000C; background-color: #FFBABA; } </style> <div id = "classbinding"> <div v-bind:class = "[infoclass, errorclass]">{{title}}</div> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#classbinding', data: { title : "This is class binding example", infoclass : 'info', errorclass : 'displayError' } }); </script> </body> </html>
输出

正如我们上面看到的,这两个类都被应用于div。让我们使用一个变量,并根据变量的值来分配类。
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <style> .info { color: #00529B; background-color: #BDE5F8; } div { margin: 10px 0; padding: 12px; font-size : 25px; } .active { color: #4F8A10; background-color: #DFF2BF; } .displayError{ color: #D8000C; background-color: #FFBABA; } </style> <div id = "classbinding"> <div v-bind:class = "[isActive ? infoclass : '', haserror ? errorclass : '']">{{title}}</div> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#classbinding', data: { title : "This is class binding example", infoclass : 'info', errorclass : 'displayError', isActive : true, haserror : false } }); </script> </body> </html>
我们使用了两个变量isActive和haserror,它们在div的类绑定中使用,如下面的div标签所示。
<div v-bind:class = "[isActive ? infoclass : '', haserror ? errorclass : '']">{{title}}</div>
如果isActive为true,则将infoclass分配给它。hasError也是如此,如果为true,则只有errorClass将应用于它。

现在,让我们将haserror变量设置为true,并将isActive变量设置为false。

我们现在将在组件中添加类的v-bind。在下面的例子中,我们向组件模板和组件添加了一个类。
示例
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <style> .info { color: #00529B; background-color: #BDE5F8; } div { margin: 10px 0; padding: 12px; font-size : 25px; } .active { color: #4F8A10; background-color: #DFF2BF; } .displayError{ color: #D8000C; background-color: #FFBABA; } </style> <div id = "classbinding"> <new_component class = "active"></new_component> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#classbinding', data: { title : "This is class binding example", infoclass : 'info', errorclass : 'displayError', isActive : false, haserror : true }, components:{ 'new_component' : { template : '<div class = "info">Class Binding for component</div>' } } }); </script> </body> </html>
以下是浏览器中的输出。它将这两个类应用于最终的div。
<div class = ”info active”></div>

添加一个组件部分中的变量来显示,基于true/false。
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <style> .info { color: #00529B; background-color: #BDE5F8; } div { margin: 10px 0; padding: 12px; font-size : 25px; } .active { color: #4F8A10; background-color: #DFF2BF; } .displayError{ color: #D8000C; background-color: #FFBABA; } </style> <div id = "classbinding"> <new_component v-bind:class = "{active:isActive}"></new_component> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#classbinding', data: { title : "This is class binding example", infoclass : 'info', errorclass : 'displayError', isActive : false, haserror : true }, components:{ 'new_component' : { template : '<div class = "info">Class Binding for component</div>' } } }); </script> </body> </html>
由于变量为false,因此未应用active类,并且应用了info类,如下面的屏幕截图所示。

绑定内联样式
对象语法
示例
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <div id = "databinding"> <div v-bind:style = "{ color: activeColor, fontSize: fontSize + 'px' }">{{title}}</div> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#databinding', data: { title : "Inline style Binding", activeColor: 'red', fontSize :'30' } }); </script> </body> </html>
输出

在上面的例子中,对于div,应用了样式,并从data对象中获取数据。
<div v-bind:style = "{ color: activeColor, fontSize: fontSize + 'px' }">{{title}}</div> data: { title : "Inline style Binding", activeColor: 'red', fontSize :'30' }
我们也可以通过将所有值分配给一个变量,然后将变量分配给div来做同样的事情。
示例
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <div id = "databinding"> <div v-bind:style = "styleobj">{{title}}</div> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#databinding', data: { title : "Inline style Binding", styleobj : { color: 'red', fontSize :'40px' } } }); </script> </body> </html>
颜色和fontSize被分配给名为styleobj的对象,并将相同的对象分配给div。
<div v-bind:style = "styleobj">{{title}}</div>
输出

表单输入绑定
到目前为止,在我们创建的示例中,我们已经看到v-model绑定输入文本元素并将值绑定到分配的变量。让我们在本节中进一步了解它。
示例
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <div id = "databinding"> <h3>TEXTBOX</h3> <input v-model = "name" placeholder = "Enter Name" /> <h3>Name entered is : {{name}}</h3> <hr/> <h3>Textarea</h3> <textarea v-model = "textmessage" placeholder = "Add Details"></textarea> <h1><p>{{textmessage}}</p></h1> <hr/> <h3>Checkbox</h3> <input type = "checkbox" id = "checkbox" v-model = "checked"> {{checked}} </div> <script type = "text/javascript"> var vm = new Vue({ el: '#databinding', data: { name:'', textmessage:'', checked : false } }); </script> </body> </html>
我们在文本框中输入的内容都会显示在下面。v-model被赋值为name,name显示在{{name}}中,显示文本框中输入的任何内容。
输出

让我们查看更多示例以及如何使用它。
单选按钮和选择
示例
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <div id = "databinding"> <h3>Radio</h3> <input type = "radio" id = "black" value = "Black" v-model = "picked">Black <input type = "radio" id = "white" value = "White" v-model = "picked">White <h3>Radio element clicked : {{picked}} </h3> <hr/> <h3>Select</h3> <select v-model = "languages"> <option disabled value = "">Please select one</option> <option>Java</option> <option>Javascript</option> <option>Php</option> <option>C</option> <option>C++</option> </select> <h3>Languages Selected is : {{ languages }}</h3> <hr/> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#databinding', data: { picked : 'White', languages : "Java" } }); </script> </body> </html>
输出

修饰符
我们在示例中使用了三个修饰符——trim、number和lazy。
示例
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> </head> <body> <div id = "databinding"> <span style = "font-size:25px;">Enter Age:</span> <input v-model.number = "age" type = "number"> <br/> <span style = "font-size:25px;">Enter Message:</span> <input v-model.lazy = "msg"> <h3>Display Message : {{msg}}</h3> <br/> <span style = "font-size:25px;">Enter Message : </span><input v-model.trim = "message"> <h3>Display Message : {{message}}</h3> </div> <script type = "text/javascript"> var vm = new Vue({ el: '#databinding', data: { age : 0, msg: '', message : '' } }); </script> </body> </html>
输出

number修饰符只允许输入数字。除了数字之外,它不会接受任何其他输入。
<span style = "font-size:25px;">Enter Age:</span> <input v-model.number = "age" type = "number">
lazy修饰符将在用户完全输入内容并离开文本框后显示文本框中的内容。
<span style = "font-size:25px;">Enter Message:</span> <input v-model.lazy = "msg">
trim修饰符将删除开头和结尾的任何空格。
<span style = "font-size:25px;">Enter Message : </span><input v-model.trim = "message">