在本章中,将学习如何在VueJS附带的名为 v-bind 的绑定指令的帮助下,对HTML属性进行操作或将值分配,更改样式以及分配类。
让无涯教程考虑一个示例,以了解为什么需要以及何时使用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>
在上面的示例中显示了一个title变量和三个href链接,还为数据对象的href分配了一个值。
现在,如果在浏览器中检查输出并检查,将看到前两个锚链接没有正确的href,如以下屏幕截图所示。
因此,要将值分配给HTML属性,需要将其与指令v-bind绑定,如下所示。
<a v-bind:href = "hreflink" target = "_blank">Click Me </a>
VueJS还提供了v-bind的简写,如下所示。
<a :href = "hreflink" target = "_blank">Click Me </a>
要绑定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创建了一个div:class =" {active:isactive}"。
在此, isactive 是基于true或false的变量。在数据对象中,无涯教程已将isactive变量分配为true。有一个用 .active 样式定义的类,背景色为红色。
如果变量isactive为true,则将应用颜色,否则不应用颜色。以下是浏览器中的输出。
在上面的显示中,可以看到背景颜色是红色。 class =" 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>
无涯教程还可以使用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类,例如class =" info"。
这是一个普通的类。这两个变量现在都为假。然后将 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。使用一个变量,并根据变量的值分配类。
链接:https://www.learnfk.comhttps://www.learnfk.com/vuejs/vuejs-binding.html
来源:LearnFk无涯教程网
<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>
以下是浏览器中的输出。它将两个类都应用于final 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,因此不应用活动类,而应用信息类,如以下屏幕截图所示。
<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,将应用样式,并从数据对象中获取数据。
<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>
无论在texbox中输入的内容如下所示。向v模型分配了值名称,并且该名称显示在{{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">
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)