vue.js數(shù)據(jù)綁定操作詳解
本文實(shí)例講述了vue.js數(shù)據(jù)綁定操作。分享給大家供大家參考,具體如下:
數(shù)據(jù)綁定
響應(yīng)式的數(shù)據(jù)綁定系統(tǒng)。建立綁定之后,DOM將和數(shù)據(jù)保持同步,無(wú)須手動(dòng)維護(hù)DOM。使代碼能夠更加簡(jiǎn)潔易懂、提升效率。
數(shù)據(jù)綁定語(yǔ)法
1.文本插值
{{ }}Mustache標(biāo)簽
<span>Hello {{ name }}</span>
data:{
name: 'vue'
}
== > Hello vue
單次插值
首次賦值后再更改vm實(shí)例屬性值不會(huì)引起DOM的變化
<span v-once="name">{{ name }}</span>
2.HTML屬性
Mustache標(biāo)簽{{ }}
<div v-bind:id="'id-'+id"></div>
簡(jiǎn)寫(xiě):
<div :id="'id-'+id"></div>
3.綁定表達(dá)式
放在Mustache標(biāo)簽內(nèi)的文本內(nèi)容。除了直接輸出屬性值之外,一段綁定表達(dá)式可以由一個(gè)簡(jiǎn)單的JavaScript表達(dá)式和可選的一個(gè)或多個(gè)過(guò)濾器構(gòu)成(不支持正則表達(dá)式,若需要復(fù)雜的轉(zhuǎn)換,則使用過(guò)濾器或者計(jì)算屬性來(lái)進(jìn)行處理)。
{{ index + 1}}
{{ index == 0 ? 'a' : 'b' }}
{{name.split('').join('|') }}
{{ var a = 1 }} //無(wú)效
4.過(guò)濾器
vue.js允許在表達(dá)式后添加可選的過(guò)濾器,以管道符"|"指示。
{{ name | uppercase }} // Vue.js將name的值傳入給uppercase這個(gè)內(nèi)置的過(guò)濾器中(本質(zhì)是一個(gè)函數(shù)),返回字符串的大寫(xiě)值。
{{ name | filterA | filterB }} //多個(gè)過(guò)濾器鏈?zhǔn)绞褂?
{{ name | filterA arg1 arg2 }} //傳入多個(gè)參數(shù)
此時(shí),filterA將name的值做為第一個(gè)參數(shù),arg1,arg2做為第二、第三個(gè)參數(shù)傳入過(guò)濾器函數(shù)中。
最終函數(shù)的返回值即為輸出結(jié)果。arg1,arg2可以使用表達(dá)式,也可以加上單引號(hào),直接傳入字符串。
例如:
{{ name.split('') | limitBy 3 1 }} // ->u,e
過(guò)濾器limitBy可以接受兩個(gè)參數(shù),第一個(gè)參數(shù)是設(shè)置顯示個(gè)數(shù),第二個(gè)參數(shù)為可選,指從開(kāi)始元素的數(shù)組下標(biāo)。
vue.js內(nèi)置的10個(gè)過(guò)濾器(Vue.js2.0中去除)
capitalize:字符串首字符轉(zhuǎn)化為大寫(xiě)。
uppercase:字符串轉(zhuǎn)化為大寫(xiě)。
lowercase:字符串轉(zhuǎn)化為小寫(xiě)。
currency:參數(shù)為{String}[貨幣符號(hào)],{Number}[小數(shù)位],將數(shù)字轉(zhuǎn)化成貨幣符號(hào),并且會(huì)自動(dòng)添加數(shù)字分節(jié)號(hào)。
{{ amount | currency '¥' 2 }} //若amount值為1000,則輸出為¥1,000.00
pluralize:參數(shù)為{String}single,[double,triple],字符串復(fù)數(shù)化。
<p v-for="c in count">{{ c | pluralize 'item' }} {{ c | pliralize 'st' 'nd' 'rd' 'th' }} </p>
//輸出結(jié)果: 1item 1st 2items 2nd 3items 3rd 4items 4th
json:參數(shù)為{Number}[indent]空格縮進(jìn)數(shù),將json對(duì)象數(shù)據(jù)輸出成符合json格式的字符串。
debounce:傳入值必須是函數(shù),參數(shù)可選,為{Number}[wait],即延時(shí)時(shí)長(zhǎng)。作用是當(dāng)調(diào)用函數(shù)n毫秒后,才會(huì)執(zhí)行該動(dòng)作。
<input v-on:keyup="onKeyup | debounce 500"> //input元素上監(jiān)聽(tīng)了keyup事件,并且延遲500ms觸發(fā)
limitBy:傳入值必須是數(shù)組,參數(shù)為{Number}limit,{Number}[offset],limit為顯示個(gè)數(shù),offset為開(kāi)始顯示數(shù)組下標(biāo)。
<div v-for="item in items | limitBy 10"></div> //items為數(shù)組,且只顯示數(shù)組中的前十個(gè)元素
filterBy:傳入值必須是數(shù)組,參數(shù)為{String | Function}targetStringOrFunction,即需要匹配的字符串或函數(shù);"in"可選分隔符。{String}[...searchKeys],為檢索的屬性區(qū)域。
<p v-for="name in names | filterBy '1.0'">{{ name }}</p> //檢索names數(shù)組中值包含1.0的元素
<p v-for="item in items | filterBy '1.0' in 'name'">{{ item | json }}</p> //檢索items中元素屬性name值為1.0的元素輸出。檢索區(qū)域也可以為數(shù)組,即in [name,version],在多個(gè)屬性中進(jìn)行檢索。
//輸出結(jié)果
vue1.0
{"name":"vue1.0","version":"1.0"}
使用自定義的過(guò)濾函數(shù),函數(shù)可以在選項(xiàng)methods中定義
<p v-for="item in items | filterBy customFilter"
methods:{
cuestomFilter:function(item){
if(item.name) return true; //檢索所有元素中包含name屬性的元素
}
}
orderBy:傳入值必須是數(shù)組,參數(shù)為{String|Array|Function}sortKeys,即指定排序的策略。
單個(gè)鍵名:
<p v-for="item in items | orderBy 'name' -1">{{ item.name}}</p> //items數(shù)組中以鍵名name進(jìn)行降序排列
多個(gè)鍵名:
<p v-for="item in items | orderBy [name,version]">{{item.name}}</p> //使用items里的兩個(gè)鍵名進(jìn)行排序
自定義排序函數(shù):
<p v-for="item in items | orderBy customOrder">{{item.name}}</p>
methods:{
customOrder: function(a,b){
return parseFloat(a.version) > parseFloat(b.version) //對(duì)比item中version的值的大小進(jìn)行排序
}
}
5.指令
指令的值限定為綁定表達(dá)式,即當(dāng)表達(dá)式的值發(fā)生改變時(shí),會(huì)有些特殊行為作用到綁定的DOM上。
參數(shù):src為參數(shù)
<img v-bind:src="avatar" /> <==> <img src="{{avatar}}" />
修飾符:以半角句號(hào).開(kāi)始的特殊后綴,用于表示指令應(yīng)該以特殊方式綁定。
<button v-on:click.stop="doClick"></button> //stop:停止冒泡。相當(dāng)于調(diào)用了e.stopPropagagation().
計(jì)算屬性
避免在模板中加入過(guò)重的業(yè)務(wù)邏輯,保證模版的結(jié)構(gòu)清晰和可維護(hù)性。
1.基礎(chǔ)例子
var vm = new Vue({
el: '#app',
data: {
firstName:'Gavin',
lastName:'CLY'
},
computed: {
fullName:function(){
//this指向vm實(shí)例
return this.firstName + ' ' + this.lastName;
}
}
})
<p>{{ firstName }}</p> //Gavin
<p>{{ lastName }}</p> //CLY
<p>{{ fullName }}</p> //Gavin CLY
注:此時(shí)對(duì)vm.firstName和vm.lastName進(jìn)行修改,始終會(huì)影響vm.fullName。
2.Setter
更新屬性時(shí)帶來(lái)便利
var vm = new Vue({
el:'#el',
data:{
cents:100
},
computed:{
price:{
set:function(newValue) {
this.cents = newValue * 100;
},
get:function(){
return (this.cents / 100).toFixed(2);
}
}
}
})
表單控件
v-model:對(duì)表單元素進(jìn)行雙向數(shù)據(jù)綁定,在修改表單元素值時(shí),實(shí)例vm中對(duì)應(yīng)的屬性值也同時(shí)更新,反之亦然。
var vm = new Vue({
el:'#app',
data: {
message: '',
gender: '',
cheched: '',
multiChecked: '',
a: 'checked',
b: 'checked'
}
})
1. Text
輸入框示例,用戶(hù)輸入的內(nèi)容和vm.message直接綁定:
<input type="text" v-model="message" />
<span>Your input is : {{ message }} </span>
2. Radio
單選框示例:
<label><input type="radio" value="male" v-model="gender">男</lable>
<label><input type="radio" value="famale" v-model="gender">女</lable>
<p>{{ gender }}</p> //顯示的是value值
3.Checkbox
單個(gè)勾選框,v-model即為布爾值,此時(shí)Input的value并不影響v-model的值。
<input type="checkbox" v-model="checked" />
<span>checked: {{ checked }} </span> //顯示的是true/false
多個(gè)勾選框,v-model使用相同的屬性名稱(chēng),且屬性為數(shù)組。
<label><input type="checkbox" value="1" v-model="multiChecked">1</label>
<label><input type="checkbox" value="1" v-model="multiChecked">2</label>
<label><input type="checkbox" value="1" v-model="multiChecked">3</label>
<p>MultiChecked:{{ multiChecked.join{'|'} }}</p> //multiChecked:1|2
4.Select
單選
<select v-model="selected">
<option selected>A</option>
<option>B</option>
<option>C</option>
</select>
<span>Selected: {{ selected }}</span>
多選
<select v-model="multiSelected" multiple>
<option selected>A</option>
<option>B</option>
<option>C</option>
</select>
<span>MultiSelected: {{ multiSelected.join('|') }}</span>
5.綁定value
通過(guò)v-bind實(shí)現(xiàn),表單控件的值綁定到Vue市里的動(dòng)態(tài)屬性上。
Checkbox
<input type="checkbox" v-model="checked" v-bind:true-value="a" v-bind:false-value="b" />
選中:
vm.checked == vm.a //=> true
未選中:
vm.checked == vm.b //=>true
Radio
<input type="radio" v-model="checked" v-bind:value="a" >
選中:
vm.checked == vm.a //=> true
3.Select Options
<select v-model="selected">
<!-- 對(duì)象字面量 -->
<option v-bind:value="{ number:123}">123</option>
</select>
選中:
typeof vm.selected //=> object vm.selected.number //=> 123
6.參數(shù)特性
.lazy:默認(rèn)情況下,v-model在input事件中同步輸入框與數(shù)據(jù),加lazy屬性后會(huì)在change事件中同步。
<!-- 在 "change" 而不是 "input" 事件中更新 --> <input v-model.lazy="msg" >
.number:自動(dòng)將用戶(hù)輸入轉(zhuǎn)為Number類(lèi)型,如果原值轉(zhuǎn)換結(jié)果為NaN,則返回原值。
<input v-model.number="age" type="number">
.trim:如果要自動(dòng)過(guò)濾用戶(hù)輸入的首尾空格,可以添加 trim 修飾符到 v-model 上過(guò)濾輸入
<input v-model.trim="msg">
Class與Style綁定
1.Class綁定
對(duì)象語(yǔ)法:v-bind:class接受參數(shù)是一個(gè)對(duì)象,而且可以與普通的class屬性共存。
<div class="tab" v-bind:class="{'active':active,'unactive':!active}"></div>
vm實(shí)例中需要包含:
data:{
active:true
}
渲染結(jié)果為:
<div class="tab active"></div>
數(shù)組語(yǔ)法:v-bind:class也接受數(shù)組作為參數(shù)。
<div v-bind:class="[classA,classB]"></div>
vm實(shí)例中需要包括:
data:{
classA:"class-a",
classB:"class-b"
}
渲染結(jié)果為:
<div class="class-a class-b"></div>
使用三元表達(dá)式切換數(shù)組中的class
<div v-bind:class="[classA,isB?classB:""]"></div>
若
vm.isB = false
則渲染結(jié)果為
<div class="class-a"></div>
2.內(nèi)聯(lián)樣式綁定(style屬性綁定)
對(duì)象語(yǔ)法:直接綁定符合樣式格式的對(duì)象。
<div v-bind:style="alertStyle"></div>
vm實(shí)例中包含:
data:{
alertStyle:{
color: 'red',
fontSize: '2px'
}
}
<div v-bind:style="{fontSize:alertStyle.fontSize,color:'red'}"></div>
數(shù)組語(yǔ)法:v-bind:style允許將多個(gè)樣式對(duì)象綁定到同一元素上。
<div v-bind:style="[ styleObjectA,styleObjectB]" .></div>
3.自動(dòng)添加前綴
在使用transform這類(lèi)屬性時(shí),v-bind:style會(huì)根據(jù)需要自動(dòng)添加廠商前綴。:style在運(yùn)行時(shí)進(jìn)行前綴探測(cè),如果瀏覽器版本本省就不支持不加前綴的css屬性,那就不會(huì)添加。
希望本文所述對(duì)大家vue.js程序設(shè)計(jì)有所幫助。
相關(guān)文章
uniapp使用條件編譯#ifdef(跨平臺(tái)設(shè)備兼容)
這篇文章主要介紹了uniapp使用條件編譯#ifdef(跨平臺(tái)設(shè)備兼容),需要的朋友可以參考下2022-12-12
微信小程序地圖導(dǎo)航功能實(shí)現(xiàn)完整源代碼附效果圖(推薦)
這篇文章主要介紹了微信小程序地圖導(dǎo)航功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Element-UI?el-table對(duì)循環(huán)產(chǎn)生的空白列賦默認(rèn)值方式
這篇文章主要介紹了Element-UI?el-table對(duì)循環(huán)產(chǎn)生的空白列賦默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Vue2.x中的父組件傳遞數(shù)據(jù)至子組件的方法
這篇文章主要介紹了Vue2.x中的父組件數(shù)據(jù)傳遞至子組件的方法,需要的朋友可以參考下2017-05-05
uniapp 拖拽圖片排序功能實(shí)現(xiàn) 類(lèi)似于微信朋友圈效果
這篇文章主要介紹了uniapp 拖拽圖片排序功能實(shí)現(xiàn)類(lèi)似于微信朋友圈,一部分是拖拽的放大做小,xy位置判定,圖片數(shù)組的插入排序,另一部分是上傳加號(hào)圖片的?定位? 動(dòng)態(tài)計(jì)算分為幾列,每一個(gè)圖片大小的位置?絕對(duì)定位的計(jì)算,需要的朋友可以參考下2024-07-07
Vue編譯報(bào)錯(cuò)內(nèi)存溢出問(wèn)題解決方式
這篇文章主要為大家介紹了Vue編譯報(bào)錯(cuò)內(nèi)存溢出問(wèn)題解決方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
vue?echarts實(shí)現(xiàn)改變canvas長(zhǎng)和寬自適應(yīng)
這篇文章主要介紹了vue?echarts實(shí)現(xiàn)改變canvas長(zhǎng)和寬自適應(yīng)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
Vue使用Tinymce富文本自定義toolbar按鈕的實(shí)踐
本文主要介紹了Vue使用Tinymce富文本自定義toolbar按鈕,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
vue?如何綁定disabled屬性讓其不能被點(diǎn)擊
這篇文章主要介紹了vue?如何綁定disabled屬性讓其不能被點(diǎn)擊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04

