亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

多伦县| 武汉市| 申扎县| 长宁区| 全州县| 波密县| 贺州市| 上思县| 宁国市| 阜平县| 邢台市| 丽水市| 永嘉县| 新营市| 英德市| 呼和浩特市| 廊坊市| 花莲县| 全南县| 镇坪县| 扶余县| 容城县| 徐州市| 兴安县| 龙川县| 平利县| 晋宁县| 慈溪市| 上栗县| 永丰县| 利辛县| 平阳县| 福清市| 蒙阴县| 诏安县| 靖边县| 格尔木市| 安顺市| 全南县| 卓资县| 盐亭县|