首頁  >  文章  >  web前端  >  怎樣操作vue.js資料綁定

怎樣操作vue.js資料綁定

php中世界最好的语言
php中世界最好的语言原創
2018-06-06 14:10:251227瀏覽

這次帶給大家怎樣操作vue.js資料綁定,操作vue.js資料綁定的注意事項有哪些,下面就是實戰案例,一起來看一下。

資料綁定

響應式的資料綁定係統。建立綁定之後,​​DOM將和資料保持同步,無須手動維護DOM。使程式碼更簡潔易懂、提升效率。

資料綁定語法

#1.文字內插

{{ }}Mustache標籤

<span>Hello {{ name }}</span>
data:{
    name: 'vue'
}
== > Hello vue

單次插值

#首次賦值後再更改vm實例屬性值不會造成DOM的變化

<span v-once="name">{{ name }}</span>

# 2.HTML屬性

Mustache標籤{{ }}

<p v-bind:id="&#39;id-&#39;+id"></p>

#簡單寫:

<p :id="&#39;id-&#39;+id"></p>

3.綁定表達式

#放在Mustache標籤內的文字內容。除了直接輸出屬性值之外,一段綁定表達式可以由一個簡單的JavaScript表達式和可選的一個或多個過濾器構成(不支援正則表達式,若需要複雜的轉換,則使用過濾器或者計算屬性來進行處理)。

{{ index + 1}}
{{ index == 0 ? 'a' : 'b' }}
{{name.split('').join('|') }}
{{ var a = 1 }} //无效

4.過濾器

vue.js允許在表達式後新增可選的過濾器,以管道符"|"指示。

{{ name | uppercase }} // Vue.js将name的值传入给uppercase这个内置的过滤器中(本质是一个函数),返回字符串的大写值。
{{ name | filterA | filterB }}  //多个过滤器链式使用
{{ name | filterA arg1 arg2 }} //传入多个参数

此時,filterA將name的值做成第一個參數,arg1,arg2做為第二、第三個參數傳入過濾器函數中。

最終函數的回傳值即為輸出結果。 arg1,arg2可以使用表達式,也可以加上單引號,直接傳入字串。

例如:

{{ name.split('') | limitBy 3 1 }} // ->u,e

過濾器limitBy可以接受兩個參數,第一個參數是設定顯示個數,第二個參數為可選,指從開始元素的陣列下標。

vue.js內建的10個篩選器(Vue.js2.0中移除)

capitalize:字串首字轉換為大寫。
uppercase:字串轉換為大寫。
lowercase:字串轉換為小寫。
currency:參數為{String}[貨幣符號],{Number}[小數位],將數字轉換成貨幣符號,並且會自動加上數字分節號。

{{ amount | currency '¥' 2 }} //若amount值为1000,则输出为¥1,000.00

pluralize:參數為{String}single,[double,triple],字串複數化。

<p v-for="c in count">{{ c | pluralize 'item' }} {{ c | pliralize 'st' 'nd' 'rd' 'th' }} </p>
//输出结果:
1item 1st
2items 2nd
3items 3rd
4items 4th

json:參數為{Number}[indent]空格縮排數,將json物件資料輸出成符合json格式的字串。

debounce:傳入值必須是函數,參數可選,為{Number}[wait],即延遲時長。作用是當呼叫函數n毫秒後,才會執行該動作。

<input v-on:keyup="onKeyup | debounce 500"> //input元素上监听了keyup事件,并且延迟500ms触发

limitBy:傳入值必須是數組,參數為{Number}limit{Number}[offset],limit為顯示個數,offset為開始顯示陣列下標。

<p v-for="item in items | limitBy 10"></p> //items为数组,且只显示数组中的前十个元素

filterBy:傳入值必須是數組,參數為{String | Function}targetStringOrFunction,即需要匹配的字串或函數;"in"可選分隔符號。 {String}[...searchKeys],為檢索的屬性區域。

<p v-for="name in names | filterBy &#39;1.0&#39;">{{ name }}</p> //检索names数组中值包含1.0的元素
<p v-for="item in items | filterBy &#39;1.0&#39; in &#39;name&#39;">{{ item | json }}</p> //检索items中元素属性name值为1.0的元素输出。检索区域也可以为数组,即in [name,version],在多个属性中进行检索。
//输出结果
vue1.0
{"name":"vue1.0","version":"1.0"}

使用自訂的過濾函數,函數可以在選項methods中定義

<p v-for="item in items | filterBy customFilter"
  methods:{
    cuestomFilter:function(item){
      if(item.name) return true;  //检索所有元素中包含name属性的元素
    }
  }

orderBy:傳入值必須是數組,參數為{String |Array|Function}sortKeys,即指定排序的策略。

單一鍵名:

<p v-for="item in items | orderBy &#39;name&#39; -1">{{ item.name}}</p> //items数组中以键名name进行降序排列

多個鍵名:

<p v-for="item in items | orderBy [name,version]">{{item.name}}</p> //使用items里的两个键名进行排序

#自訂排序函數:

<p v-for="item in items | orderBy customOrder">{{item.name}}</p>
methods:{
  customOrder: function(a,b){
    return parseFloat(a.version) > parseFloat(b.version) //对比item中version的值的大小进行排序
  }
}

#5.指令

指令的值限定為綁定表達式,也就是當表達式的值改變時,會有些特殊行為作用到綁定的DOM上。

參數:src為參數

<img v-bind:src="avatar" /> <==>  <img src="{{avatar}}" />

修飾符:以半角句號.開始的特殊後綴,用於表示指令應該以特殊方式綁定。

<button v-on:click.stop="doClick"></button> //stop:停止冒泡。相当于调用了e.stopPropagagation().

計算屬性

#

避免在模板中加入过重的业务逻辑,保证模版的结构清晰和可维护性。

1.基础例子

var vm = new Vue({
    el: '#app',
    data: {
      firstName:'Gavin',
      lastName:'CLY'
    },
    computed: {
      fullName:function(){
        //this指向vm实例
        return this.firstName + ' ' + this.lastName;
      }
    }
})
<p>{{ firstName }}</p>  //Gavin
<p>{{ lastName }}</p>  //CLY
<p>{{ fullName }}</p>  //Gavin CLY

注:此时对vm.firstNamevm.lastName进行修改,始终会影响vm.fullName

2.Setter

更新属性时带来便利

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:对表单元素进行双向数据绑定,在修改表单元素值时,实例vm中对应的属性值也同时更新,反之亦然。

var vm = new Vue({
    el:'#app',
    data: {
      message: '',
      gender: '',
      cheched: '',
      multiChecked: '',
      a: 'checked',
      b: 'checked'
    }
})

1. Text

输入框示例,用户输入的内容和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

单个勾选框,v-model即为布尔值,此时Input的value并不影响v-model的值。

<input type="checkbox" v-model="checked" />
<span>checked: {{ checked }} </span> //显示的是true/false

多个勾选框,v-model使用相同的属性名称,且属性为数组。

<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

通过v-bind实现,表单控件的值绑定到Vue市里的动态属性上。

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">
    <!-- 对象字面量 -->
    <option v-bind:value="{ number:123}">123</option>
</select>

选中:

typeof vm.selected //=> object
vm.selected.number //=> 123

6.参数特性

.lazy:默认情况下,v-model在input事件中同步输入框与数据,加lazy属性后会在change事件中同步。

<!-- 在 "change" 而不是 "input" 事件中更新 -->
<input v-model.lazy="msg" >

.number:自动将用户输入转为Number类型,如果原值转换结果为NaN,则返回原值。

<input v-model.number="age" type="number">

.trim:如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入

<input v-model.trim="msg">

Class与Style绑定

1.Class绑定

对象语法:v-bind:class接受参数是一个对象,而且可以与普通的class属性共存。

<p class="tab" v-bind:class="{&#39;active&#39;:active,&#39;unactive&#39;:!active}"></p>

vm实例中需要包含:

data:{
  active:true
}

渲染结果为:

<p class="tab active"></p>

数组语法:v-bind:class也接受数组作为参数。

<p v-bind:class="[classA,classB]"></p>

vm实例中需要包括:

data:{
  classA:"class-a",
  classB:"class-b"
}

渲染结果为:

<p class="class-a class-b"></p>

使用三元表达式切换数组中的class

<p v-bind:class="[classA,isB?classB:""]"></p>

vm.isB = false

则渲染结果为

<p class="class-a"></p>

2.内联样式绑定(style属性绑定)

对象语法:直接绑定符合样式格式的对象。

<p v-bind:style="alertStyle"></p>

vm实例中包含:

data:{
  alertStyle:{
    color: 'red',
    fontSize: '2px'
  }
}
<p v-bind:style="{fontSize:alertStyle.fontSize,color:&#39;red&#39;}"></p>

数组语法:v-bind:style允许将多个样式对象绑定到同一元素上。

<p v-bind:style="[ styleObjectA,styleObjectB]" .></p>

3.自动添加前缀

在使用transform这类属性时,v-bind:style会根据需要自动添加厂商前缀。:style在运行时进行前缀探测,如果浏览器版本本省就不支持不加前缀的css属性,那就不会添加。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

怎样使用js操作图片转为base64

以上是怎樣操作vue.js資料綁定的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn