中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue中computed與watch的作用是什么

發布時間:2021-01-16 10:55:19 來源:億速云 閱讀:231 作者:Leah 欄目:web開發

這篇文章給大家介紹Vue中computed與watch的作用是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

computed

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

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

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>數量:<input type="number" v-model.number="count"/></p>
 <p>總價:{{sum}}</p>
 <p>運費:{{free}}</p>
 <p>應付:{{pay}}</p>
  data: {
      a: '',
      b:'',
      c:'',
      price: 28.8,
      count: '',
      free: 10
  },
  computed: {
    count(){
      console.log('計算屬性觸發了');
        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

屬性變化,就會觸發監聽的函數。

監聽屬性變化,一般是用于跟數據無關的業務邏輯操作。

計算屬性,適用于屬性發生變化后,需要計算得到新的數據。        

<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('觸發了a-watch');
            this.count = this.a + this.b;
          },
          b(newVal){
            console.log('觸發了b-watch');
            this.count = this.a + this.b;
          },
//          obj(newVal, oldVal){
//            console.log('觸發了obj的監聽');
//          }
//
          obj: {
            //監聽對象中的每一個值
            handler(newVal, oldVal){
              console.log('觸發了obj的監聽');
            },
            deep: true//深度監聽
          },
          //監聽對象中的某個屬性
          'obj.name': function(){
            console.log('觸發了obj.name的監聽');
          }
        }
      })
    </script>

watch 也可以在methods里面進行監聽配置

<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()">開始監聽</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('監聽到了a的變化');
              console.log(newVal, oldval);
            })
            this.$watch('obj.name', (newVal, oldval)=>{
              console.log('監聽到了obj.name的變化');
              console.log(newVal, oldval);
            })
            this.$watch('obj', (newVal, oldval)=>{
              console.log('監聽到了obj的變化');
              console.log(newVal, oldval);
            }, {
              deep: true
            })
          }
        }
      })
//      vm.$watch('a', (newVal, oldval)=>{
//        console.log('監聽到了a的變化');
//        console.log(newVal, oldval);
//      })
//      
//      vm.$watch('obj.name', (newVal, oldval)=>{
//        console.log('監聽到了obj.name的變化');
//        console.log(newVal, oldval);
//      })
//      
//      vm.$watch('obj', (newVal, oldval)=>{
//        console.log('監聽到了obj的變化');
//        console.log(newVal, oldval);
//      }, {
//        deep: true
//      })
    </script>

下面在看下computed 和 watch

??都可以觀察頁面的數據變化。當處理頁面的數據變化時,我們有時候很容易濫用watch。 而通常更好的辦法是使用computed屬性,而不是命令是的watch回調。

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

關于Vue中computed與watch的作用是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖州市| 姚安县| 正安县| 武川县| 土默特右旗| 湛江市| 静安区| 潞城市| 揭阳市| 瑞安市| 呈贡县| 宁德市| 徐水县| 浦江县| 德庆县| 大名县| 涟源市| 临城县| 吉水县| 天门市| 安塞县| 鄂托克前旗| 旺苍县| 南华县| 盈江县| 永平县| 延川县| 应城市| 惠安县| 青州市| 娄底市| 崇仁县| 萝北县| 乌鲁木齐县| 元朗区| 苍溪县| 牙克石市| 韩城市| 额敏县| 佛教| 长沙县|