最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Vue實例對象的數(shù)據(jù)選項

 更新時間:2017年08月09日 07:58:06   投稿:jingxian  
下面小編就為大家?guī)硪黄赩ue實例對象的數(shù)據(jù)選項。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前面的話

一般地,當模板內(nèi)容較簡單時,使用data選項配合表達式即可。涉及到復雜邏輯時,則需要用到methods、computed、watch等方法。本文將詳細介紹Vue實例對象的數(shù)據(jù)選項

data

data是Vue實例的數(shù)據(jù)對象。Vue將會遞歸將data的屬性轉換為getter/setter,從而讓data屬性能響應數(shù)據(jù)變化

[注意]不應該對data屬性使用箭頭函數(shù)

<div id="app">
 {{ message }}
</div>
<script>
var values = {message: 'Hello Vue!'}
var vm = new Vue({
 el: '#app',
 data: values
})
console.log(vm);
</script>

Vue實例創(chuàng)建之后,可以通過vm.$data訪問原始數(shù)據(jù)對象

console.log(vm.$data);

Vue實例也代理了data對象上所有的屬性

<script>
var values = {message: 'Hello Vue!'}
var vm = new Vue({
 el: '#app',
 data: values
})
console.log(vm.$data === values);//true
console.log(vm.message);//'Hello Vue!'
console.log(vm.$data.message);//'Hello Vue!'
</script>

被代理的屬性是響應的,也就是說值的任何改變都是觸發(fā)視圖的重新渲染。設置屬性也會影響到原始數(shù)據(jù),反之亦然

但是,以_$開頭的屬性不會被Vue實例代理,因為它們可能和Vue內(nèi)置的屬性或方法沖突??梢允褂美?code>vm.$data._property的方式訪問這些屬性

<script>
var values = {
 message: 'Hello Vue!',
 _name: '小火柴'
}
var vm = new Vue({
 el: '#app',
 data: values
})
console.log(vm._name);//undefined
console.log(vm.$data._name);//'小火柴'
</script>

computed

計算屬性函數(shù)computed將被混入到Vue實例中。所有getter和setter的this上下文自動地綁定為Vue實例

[注意]不應該使用箭頭函數(shù)來定義計算屬性函數(shù)

下面是關于computed的一個例子

<div id="example">
 <p>原始字符串: "{{ message }}"</p>
 <p>反向字符串: "{{ reversedMessage }}"</p>
</div>
<script>
var vm = new Vue({
 el: '#example',
 data: {
 message: '小火柴'
 },
 computed: {
 reversedMessage: function () {
  return this.message.split('').reverse().join('')
 }
 }
})
</script>

結果如下

這里聲明了一個計算屬性 reversedMessage 。提供的函數(shù)將用作屬性 vm.reversedMessage 的 getter

console.log(vm.reversedMessage) // -> '柴火小'
vm.message = 'Goodbye'
console.log(vm.reversedMessage) // -> 'eybdooG'

結果如下圖所示,vm.reversedMessage依賴于vm.message的值,vm.reversedMessage本身并不能被賦值

【setter】

計算屬性默認只有 getter ,不過在需要時也可以提供一個 setter

<script>
var vm = new Vue({
 data: { a: 1 },
 computed: {
 // 僅讀取,值只須為函數(shù)
 aDouble: function () {
  return this.a * 2
 },
 // 讀取和設置
 aPlus: {
  get: function () {
  return this.a + 1
  },
  set: function (v) {
  this.a = v - 1
  }
 }
 }
})
console.log(vm.aPlus);//2
vm.aPlus = 3
console.log(vm.a);//2
console.log(vm.aDouble);//4
</script>

methods

通過調(diào)用表達式中的 methods 也可以達到同樣的效果

[注意]不應該使用箭頭函數(shù)來定義methods函數(shù)

<div id="example">
 <p>原始字符串: "{{ message }}"</p>
 <p>反向字符串: "{{ reversedMessage() }}"</p>
</div>
<script>
var vm = new Vue({
 el: '#example',
 data: {
 message: '小火柴'
 },
 methods: {
 reversedMessage: function () {
  return this.message.split('').reverse().join('')
 }
 } 
})
</script>

【緩存】

對于最終的結果,兩種方式確實是相同的

然而,不同的是計算屬性是基于它們的依賴進行緩存的。計算屬性只有在它的相關依賴發(fā)生改變時才會重新求值。這就意味著只要 message 還沒有發(fā)生改變,多次訪問 reversedMessage 計算屬性會立即返回之前的計算結果,而不必再次執(zhí)行函數(shù)

相比而言,只要發(fā)生重新渲染,method 調(diào)用總會執(zhí)行該函數(shù)。如下所示

<div id="example">
 <p>計算屬性: "{{ time1 }}"</p>
 <p>methods方法: "{{ time2() }}"</p>
</div>
<script>
var vm = new Vue({
 el: '#example',
 computed:{
 time1: function () {
  return (new Date()).toLocaleTimeString()
 }
 },
 methods: {
 time2: function () {
  return (new Date()).toLocaleTimeString()
 }
 } 
})
</script>

假設有一個性能開銷比較大的的計算屬性A,它需要遍歷一個極大的數(shù)組和做大量的計算??赡苡衅渌挠嬎銓傩砸蕾囉?A 。如果沒有緩存,將不可避免的多次執(zhí)行A的getter!如果不希望有緩存,則用 method 替代

watch

Vue提供了一種通用的方式來觀察和響應Vue實例上的數(shù)據(jù)變動:watch屬性。watch屬性是一個對象,鍵是需要觀察的表達式,值是對應回調(diào)函數(shù),回調(diào)函數(shù)得到的參數(shù)為新值和舊值。值也可以是方法名,或者包含選項的對象。Vue實例將會在實例化時調(diào)用$watch(),遍歷watch對象的每一個屬性

[注意]不應該使用箭頭函數(shù)來定義 watch 函數(shù)

<div id="app">
 <button @click="a++">a加1</button>
 <p>{{ message }}</p>
</div>
<script>
var vm = new Vue({
 el: '#app',
 data: {
 a: 1,
 message:''
 },
 watch: {
 a: function (val, oldVal) {
  this.message = 'a的舊值為' + oldVal + ',新值為' + val;
 }
 }
})
</script>

上面代碼中,當a的值發(fā)生變化時, 通過watch的監(jiān)控,使message輸出相應的內(nèi)容

【$watch】

除了使用數(shù)據(jù)選項中的watch方法以外,還可以使用實例對象的$watch方法, 該方法的返回值是一個取消觀察函數(shù),用來停止觸發(fā)回調(diào)

<div id="app">
 <button @click="a++">a加1</button>
 <p>{{ message }}</p>
</div>
<script>
var vm = new Vue({
 el: '#app',
 data: {
 a: 1,
 message:''
 }
})
var unwatch = vm.$watch('a',function(val, oldVal){
 if(val === 10){
 unwatch();
 }
 this.message = 'a的舊值為' + oldVal + ',新值為' + val; 
})
</script>

上面的代碼中,當a的值更新到10時,觸發(fā)unwatch(),來取消觀察。點擊按鈕時,a的值仍然會變化,但是不再觸發(fā)watch的回調(diào)函數(shù)

以上這篇基于Vue實例對象的數(shù)據(jù)選項就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • vue中使用rem布局代碼詳解

    vue中使用rem布局代碼詳解

    在本篇文章里小編給大家整理的是關于vue中使用rem布局代碼詳解知識點,需要的朋友們參考下。
    2019-10-10
  • 如何利用vue實現(xiàn)登陸界面及其跳轉詳解

    如何利用vue實現(xiàn)登陸界面及其跳轉詳解

    在開發(fā)中我們經(jīng)常遇到這樣的需求,需要用戶直接點擊一個鏈接進入到一個頁面,下面這篇文章主要給大家介紹了關于如何利用vue實現(xiàn)登陸界面及其跳轉的相關資料,需要的朋友可以參考下
    2023-04-04
  • postcss-pxtorem設置不轉換UI框架的CSS單位問題

    postcss-pxtorem設置不轉換UI框架的CSS單位問題

    這篇文章主要介紹了postcss-pxtorem設置不轉換UI框架的CSS單位問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Vuex 入門教程

    Vuex 入門教程

    這篇文章主要介紹了Vuex 入門教程,Vuex 是一個專為 Vue.js 應用程序開發(fā)的狀態(tài)管理模式, 那這個 vuex 怎么用呢?就具體來看一下吧
    2018-01-01
  • Vue.js如何監(jiān)聽window窗口尺寸變化

    Vue.js如何監(jiān)聽window窗口尺寸變化

    使用VUE開發(fā)后臺項目,后臺項目需要進行后臺根據(jù)瀏覽器窗口進行變化,需要使用vue來監(jiān)聽瀏覽器的窗口變化,這篇文章主要給大家介紹了關于Vue.js如何監(jiān)聽window窗口尺寸變化的相關資料,需要的朋友可以參考下
    2023-11-11
  • vue分頁器組件編寫方法詳解

    vue分頁器組件編寫方法詳解

    這篇文章主要為大家詳細介紹了vue分頁器組件編寫方法,可設置初始當前頁,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 解決Vue 瀏覽器后退無法觸發(fā)beforeRouteLeave的問題

    解決Vue 瀏覽器后退無法觸發(fā)beforeRouteLeave的問題

    這篇文章主要介紹了解決Vue 瀏覽器后退無法觸發(fā)beforeRouteLeave的問題,需要的朋友可以參考下
    2017-12-12
  • vue時間格式化實例代碼

    vue時間格式化實例代碼

    本篇文章主要介紹了vue時間格式化實例代碼,這里整理了詳細的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 解決Vue項目Network:?unavailable的問題

    解決Vue項目Network:?unavailable的問題

    項目只能通過Local訪問而不能通過Network訪問,本文主要介紹了解決Vue項目Network:?unavailable的問題,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Vue中調(diào)用組件使用kebab-case短橫線命名法和使用大駝峰的區(qū)別詳解

    Vue中調(diào)用組件使用kebab-case短橫線命名法和使用大駝峰的區(qū)別詳解

    這篇文章主要介紹了Vue中調(diào)用組件使用kebab-case(短橫線)命名法和使用大駝峰的區(qū)別,通過實例可以看出如果是在html中使用組件,那么就不能用大駝峰式寫法,如果是在.vue?文件中就可以,需要的朋友可以參考下
    2023-10-10

最新評論

榆林市| 来凤县| 北海市| 双桥区| 邢台市| 九江市| 建水县| 河南省| 鹤岗市| 卢湾区| 固原市| 永胜县| 通海县| 建宁县| 屯门区| 高淳县| 昭觉县| 江山市| 扬中市| 正镶白旗| 界首市| 丁青县| 惠来县| 双鸭山市| 陈巴尔虎旗| 平舆县| 昌黎县| 潜江市| 呼和浩特市| 永济市| 南木林县| 吐鲁番市| 肇庆市| 兖州市| 宜川县| 红安县| 汶上县| 郓城县| 渭源县| 东丽区| 巴楚县|