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

深入淺析Vue中的 computed 和 watch

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

computed

計(jì)算屬性:通過屬性計(jì)算得來的屬性

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

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>單價(jià):{{price}}</p>
 <p>數(shù)量:<input type="number" v-model.number="count"/></p>
 <p>總價(jià):{{sum}}</p>
 <p>運(yùn)費(fèi):{{free}}</p>
 <p>應(yīng)付:{{pay}}</p>
  data: {
      a: '',
      b:'',
      c:'',
      price: 28.8,
      count: '',
      free: 10
  },
  computed: {
    count(){
      console.log('計(jì)算屬性觸發(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

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

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

計(jì)算屬性,適用于屬性發(fā)生變化后,需要計(jì)算得到新的數(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)聽對(duì)象中的每一個(gè)值
            handler(newVal, oldVal){
              console.log('觸發(fā)了obj的監(jiān)聽');
            },
            deep: true//深度監(jiān)聽
          },
          //監(jiān)聽對(duì)象中的某個(gè)屬性
          'obj.name': function(){
            console.log('觸發(fā)了obj.name的監(jiān)聽');
          }
        }
      })
    </script>

watch 也可以在methods里面進(jìn)行監(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ù)變化時(shí),我們有時(shí)候很容易濫用watch。 而通常更好的辦法是使用computed屬性,而不是命令是的watch回調(diào)。

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

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

總結(jié)

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

相關(guān)文章

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

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

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

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

    這篇文章主要介紹了element-ui?tree?異步樹實(shí)現(xiàn)勾選自動(dòng)展開、指定展開、指定勾選,項(xiàng)目中用到了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ì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Vue+tsx使用slot沒有被替換的問題

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

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

    對(duì)vux點(diǎn)擊事件的優(yōu)化詳解

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

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

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

    Vue?data中隨意改一個(gè)屬性,視圖都會(huì)更新嗎?

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

    vue封裝tabs組件案例詳解

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

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

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

最新評(píng)論

横山县| 宁武县| 昆山市| 彰武县| 达拉特旗| 双江| 喀喇沁旗| 同心县| 安新县| 察雅县| 景泰县| 南昌市| 娄烦县| 云浮市| 溧水县| 山阴县| 陕西省| 旬邑县| 衡东县| 旬阳县| 金塔县| 贵南县| 富民县| 辽宁省| 清丰县| 广东省| 车险| 洞头县| 南乐县| 安达市| 赤壁市| 普宁市| 平果县| 丘北县| 琼结县| 台前县| 广西| 和田县| 呈贡县| 新巴尔虎左旗| 河池市|