在本章中,我們將學習如何使用VueJS提供的名爲v-bind的綁定指令來操作或分配HTML屬性的值、更改樣式和分配類。
讓我們考慮一個例子來理解爲什麼需要和何時使用v-bind指令進行數據綁定。
Example
<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分配了一個值。
現在,如果我們檢查瀏覽器中的輸出並檢查,我們將看到前兩個錨定連結沒有正確的ref,如下面的螢幕截圖所示。
第一個clickme顯示的是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>
如果我們在瀏覽器中看到inspect元素,錨標記不會顯示v-bind屬性,但是它會顯示純HTML。當我們輸入DOM時,沒有看到任何VueJS屬性。
Binding HTML Classes
要綁定HTML類,我們需要使用v-bind:class。讓我們考慮一個例子並在其中綁定類。
Example
<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,則將應用顏色,否則不應用。以下是瀏覽器中的輸出。
在上面的顯示中,我們可以看到背景色是紅色的。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>
在上面的顯示中,我們可以看到活動類沒有應用到div。
我們還可以使用v-bind屬性爲HTML標記分配多個類。
Example
<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。
Output
這是一個應用的普通類。兩個變量都是假的。我們將設爲active變量爲true並查看輸出。
在上面的顯示中,在DOM中我們可以看到分配給div的兩個類info和active。讓我們將hasError變量設爲true,並將isActive設爲false。
現在,當我們在上面的顯示中看到時,info和displayError類被應用到div中,這就是我們如何根據條件應用多個類的方法。
我們也可以將類作爲數組傳遞。讓我們舉個例子來理解這一點。
Example
<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>
Output
正如我們在上面看到的,兩個類都被應用到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 while類綁定,如下div標記所示。
<div v-bind:class = "[isActive ? infoclass : '', haserror ? errorclass : '']">{{title}}</div>
如果isActive爲true,則將爲其分配infoclass。haserror也是如此,如果它是真的,那麼只有errorClass將應用於它。
現在,讓我們將haserror變量設爲true,將isActive變量設爲false。
我們現在將爲組件中的類添加v-bind。在下面的示例中,我們向組件模板和組件添加了一個類。
Example
<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在component部分添加一個變量以顯示。
<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,因此不應用活動類,而應用info類,如下面的螢幕截圖所示。
Binding Inline Styles
Object Syntax
示例
<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>
顏色和字體大小被分配給名爲styleobj的對象,而相同的被分配給div。
<div v-bind:style = "styleobj">{{title}}</div>
輸出
Form Input Bindings
到目前爲止,在我們創建的示例中,我們已經看到v-model將輸入文本元素和值綁定到指定的變量。讓我們在這一節了解更多。
Example
<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}中,其中顯示文本框中鍵入的內容。
Output
讓我們看看更多的例子和如何使用它。
Radio and Select
示例
<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>
輸出
Modifiers
我們在示例中使用了三個修飾符-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>
輸出
數字修改器只允許輸入數字。除了數字,它不需要任何其他輸入。
<span style = "font-size:25px;">Enter Age:</span> <input v-model.number = "age" type = "number">
惰性修飾符在完全輸入文本框並用戶離開文本框後,將顯示文本框中的內容。
<span style = "font-size:25px;">Enter Message:</span> <input v-model.lazy = "msg">
修剪修改器將刪除在開始和結束處輸入的任何空格。