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

深入淺析Vue中的 computed 和 watch

 更新時間:2018年06月06日 11:32:09   作者:吳凌云  
computed 計算屬性是通過屬性計算得來的屬性,watch屬性變化,就會觸發(fā)監(jiān)聽的函數(shù)。下面通過本文給大家介紹Vue中的 computed 和 watch,感興趣的朋友一起看看吧

computed

計算屬性:通過屬性計算得來的屬性

    計算屬性,是在相關(guān)聯(lián)的屬性發(fā)生變化才計算,計算過一次,如果相關(guān)屬性沒有變化,下一次就不需要計算了,直接去緩存的值

a:<input type="number" v-model.number="a" />
 b:<input type="number" v-model.number="b" />
 <!--c:<input type="number" v-model.number="c" />-->
 總和:{{sum()}}
 總和:{{count}}
 平均值:{{avg}}
 <p v-once>單價:{{price}}</p>
 <p>數(shù)量:<input type="number" v-model.number="count"/></p>
 <p>總價:{{sum}}</p>
 <p>運費:{{free}}</p>
 <p>應(yīng)付:{{pay}}</p>
  data: {
      a: '',
      b:'',
      c:'',
      price: 28.8,
      count: '',
      free: 10
  },
  computed: {
    count(){
      console.log('計算屬性觸發(fā)了');
        return this.a+this.b;
    },
    avg(){
      return this.count/2;
    },
    sum(){
      return this.price * this.count;
    },
   pay(){
    if(this.count>0){
      if(this.sum>=299){
        return this.sum;
    }else{
      return this.sum + this.free;
    }
     }else{
        return 0;
    }
    }
   }

watch

屬性變化,就會觸發(fā)監(jiān)聽的函數(shù)。

監(jiān)聽屬性變化,一般是用于跟數(shù)據(jù)無關(guān)的業(yè)務(wù)邏輯操作。

計算屬性,適用于屬性發(fā)生變化后,需要計算得到新的數(shù)據(jù)。        

<div id="app">
      a: <input type="number" v-model.number="a" /><br />
      b: <input type="number" v-model.number="b" /><br />
      總和:{{count}}
      <br /><br /><br />
      name: <input type="text" v-model="obj.name" /><br />
      age: <input type="text" v-model.number="obj.age" /><br />
    </div>
    <script src="vue.js"></script>
    <script>
      var vm = new Vue({
        el: '#app',
        data: {
          a: '',
          b: '',
          count: '',
          obj: {
            name: '',
            age: ''
          }
        },
        watch: {
          a(newVal, oldVal){
            console.log('觸發(fā)了a-watch');
            this.count = this.a + this.b;
          },
          b(newVal){
            console.log('觸發(fā)了b-watch');
            this.count = this.a + this.b;
          },
//          obj(newVal, oldVal){
//            console.log('觸發(fā)了obj的監(jiān)聽');
//          }
//
          obj: {
            //監(jiān)聽對象中的每一個值
            handler(newVal, oldVal){
              console.log('觸發(fā)了obj的監(jiān)聽');
            },
            deep: true//深度監(jiān)聽
          },
          //監(jiān)聽對象中的某個屬性
          'obj.name': function(){
            console.log('觸發(fā)了obj.name的監(jiān)聽');
          }
        }
      })
    </script>

watch 也可以在methods里面進行監(jiān)聽配置

<div id="app">
      a: <input type="number" v-model.number="a" /><br />
      b: <input type="number" v-model.number="b" /><br />
      總和:{{count}}
      <br /><br /><br />
      name: <input type="text" v-model="obj.name" /><br />
      age: <input type="text" v-model.number="obj.age" /><br />
      <button @click="btnAction()">開始監(jiān)聽</button>
    </div>
    <script src="vue.js"></script>
    <script>
      var vm = new Vue({
        el: '#app',
        data: {
          a: '',
          b: '',
          count: '',
          obj: {
            name: '',
            age: ''
          }
        },
        methods: {
          btnAction(){
            this.$watch('a', (newVal, oldval)=>{
              console.log('監(jiān)聽到了a的變化');
              console.log(newVal, oldval);
            })
            this.$watch('obj.name', (newVal, oldval)=>{
              console.log('監(jiān)聽到了obj.name的變化');
              console.log(newVal, oldval);
            })
            this.$watch('obj', (newVal, oldval)=>{
              console.log('監(jiān)聽到了obj的變化');
              console.log(newVal, oldval);
            }, {
              deep: true
            })
          }
        }
      })
//      vm.$watch('a', (newVal, oldval)=>{
//        console.log('監(jiān)聽到了a的變化');
//        console.log(newVal, oldval);
//      })
//      
//      vm.$watch('obj.name', (newVal, oldval)=>{
//        console.log('監(jiān)聽到了obj.name的變化');
//        console.log(newVal, oldval);
//      })
//      
//      vm.$watch('obj', (newVal, oldval)=>{
//        console.log('監(jiān)聽到了obj的變化');
//        console.log(newVal, oldval);
//      }, {
//        deep: true
//      })
    </script>

下面在看下computed 和 watch

  都可以觀察頁面的數(shù)據(jù)變化。當(dāng)處理頁面的數(shù)據(jù)變化時,我們有時候很容易濫用watch。 而通常更好的辦法是使用computed屬性,而不是命令是的watch回調(diào)。

/*html:
  我們要實現(xiàn) 第三個表單的值 是第一個和第二個的拼接,并且在前倆表單數(shù)值變化時,第三個表單數(shù)值也在變化
  */
<div id="myDiv">
  <input type="text" v-model="firstName">
  <input type="text" v-model="lastName">
  <input type="text" v-model="fullName">
</div>
<!--js: 用watch方法來實現(xiàn)-->
//將需要watch的屬性定義在watch中,當(dāng)屬性變化氏就會動態(tài)的執(zhí)行watch中的操作,并動態(tài)的可以更新到dom中 
 new Vue({
 el: '#myDiv',
 data: {
  firstName: 'Foo',
  lastName: 'Bar',
  fullName: 'Foo Bar'
 },
 watch: {
  firstName: function (val) {
   this.fullName = val + ' ' + this.lastName
  },
  lastName: function (val) {
   this.fullName = this.firstName + ' ' + val
  }
 }
})
<!--js: 利用computed 來寫-->
  //計算屬性是基于它們的依賴進行緩存的。計算屬性只有在它的相關(guān)依賴發(fā)生改變時才會重新求值。
  //這就意味著只要 message 還沒有發(fā)生改變,多次訪問 reversedMessage 計算屬性會立即返回之前的計算結(jié)果,而不必再次執(zhí)行函數(shù)。
 new Vue({
    el:"#myDiv",
      data:{
        firstName:"Den",
        lastName:"wang",
      },
      computed:{
        fullName:function(){
          return this.firstName + " " +this.lastName;
        }
      }
  })

  很容易看出 computed 在實現(xiàn)上邊的效果時,是更簡單的。

總結(jié)

以上所述是小編給大家介紹的Vue中的 computed 和 watch,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • vue使用docxtemplater導(dǎo)出word

    vue使用docxtemplater導(dǎo)出word

    docxtemplater?是一種郵件合并工具,以編程方式使用并處理條件、循環(huán),并且可以擴展以插入任何內(nèi)容,下面我們來看看如何使用docxtemplater導(dǎo)出word吧
    2025-04-04
  • element-ui?tree?異步樹實現(xiàn)勾選自動展開、指定展開、指定勾選功能

    element-ui?tree?異步樹實現(xiàn)勾選自動展開、指定展開、指定勾選功能

    這篇文章主要介紹了element-ui?tree?異步樹實現(xiàn)勾選自動展開、指定展開、指定勾選,項目中用到了vue的element-ui框架,用到了el-tree組件,由于數(shù)據(jù)量很大,使用了數(shù)據(jù)懶加載模式,即異步樹,需要的朋友可以參考下
    2022-08-08
  • vue中Promise的使用方法詳情

    vue中Promise的使用方法詳情

    這篇文章主要介紹了vue中Promise的使用方法詳情,Promise可以說是異步編程的一種解決方法,主要是為了解決代碼亂的情景而出現(xiàn)的,下文介紹其具體用法,需要的小伙伴可以參考一下
    2022-03-03
  • VUEX如何使用

    VUEX如何使用

    Vuex?可以幫助我們管理共享狀態(tài),并附帶了更多的概念和框架,本文主要介紹了VUEX如何使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Vue+tsx使用slot沒有被替換的問題

    Vue+tsx使用slot沒有被替換的問題

    本文主要介紹了Vue+tsx使用slot沒有被替換的問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 對vux點擊事件的優(yōu)化詳解

    對vux點擊事件的優(yōu)化詳解

    今天小編就為大家分享一篇對vux點擊事件的優(yōu)化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 在vue項目中優(yōu)雅的使用SVG的方法實例詳解

    在vue項目中優(yōu)雅的使用SVG的方法實例詳解

    本文旨在介紹如何在項目中配置和方便的使用svg圖標(biāo)。本文以vue項目為例給大家介紹在vue項目中優(yōu)雅的使用SVG的方法,需要的朋友參考下吧
    2018-12-12
  • Vue?data中隨意改一個屬性,視圖都會更新嗎?

    Vue?data中隨意改一個屬性,視圖都會更新嗎?

    這篇文章主要討論Vue?data中隨意改一個屬性,視圖都會更新嗎?下面來自面試官的問題然后做i出的一個問題總結(jié),具有一定的參考價值,需要的小伙伴可以參考一下
    2021-12-12
  • vue封裝tabs組件案例詳解

    vue封裝tabs組件案例詳解

    這篇文章主要為大家詳細(xì)介紹了vue封裝tabs組件案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 解決vue-photo-preview 異步圖片放大失效的問題

    解決vue-photo-preview 異步圖片放大失效的問題

    這篇文章主要介紹了解決vue-photo-preview 異步圖片放大失效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07

最新評論

南京市| 沅江市| 昂仁县| 通山县| 大庆市| 台湾省| 濉溪县| 雅安市| 南昌县| 芒康县| 庄浪县| 禹城市| 沾化县| 远安县| 嵊泗县| 新巴尔虎左旗| 泸州市| 汾西县| 达尔| 怀来县| 诏安县| 杭锦旗| 中西区| 龙江县| 德庆县| 富民县| 团风县| 邯郸县| 民和| 桃园市| 上蔡县| 仙居县| 云浮市| 平定县| 遂溪县| 金坛市| 黄山市| 香格里拉县| 桃园县| 临夏县| 乐陵市|