Vue之監聽數據變化watch、computed、methods


一、業務場景:前兩個文本框中輸入值,最后一個文本框自動監聽前面輸入的值

 方式一:使用事件綁定機制@keyup,在methods中寫入監聽方法

<body>
    <div id="app">
        firstName:<input type="text" v-model="firstname" @keyup="getFullName">+
        lastName<input type="text" v-model="lastname" @keyup="getFullName2">=
        <input type="text" v-model="fullname" >
        <p>{{fullname}}</p>
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                firstname: '',
                lastname: '',
                fullname: ''
            },
            methods: {
                getFullName(){
                    this.fullname = this.firstname + this.lastname
                },
                getFullName2(){
                    this.fullname = this.firstname + this.lastname
                }
            }
        })
    </script>
</body>

方法二:使用watch監聽文本變化

使用watch屬性 可以監視data中指定數據的變化 然后觸發這個watch中對應的處理方法

<body>
    <div id="app">
        <input type="text" v-model="firstname" >+
        <input type="text" v-model="lastname" >=
        <input type="text" v-model="fullname" >
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                firstname: '',
                lastname: '',
                fullname: ''
            },
            methods: {},
            watch: { //使用這個屬性 可以監視data中指定數據的變化 然后觸發這個watch中對應的處理方法
            //firstname可加 可不加引號 但如果是first-name 必須要加引號
               firstname: function(newVal, oldVal){
                  console.log('監視變化')
                  this.fullname = newVal + '-' + this.lastname
            },
                lastname: function (newVal) {
                    this.fullname = this.firstname + '-' + newVal
                }
            }
        })
    </script>
</body>

方法三:使用computed計算文本值

在computed中可以定義一些屬性 這些屬性叫【計算屬性】 計算屬性的本質就是一個方法,只不過在使用這些計算屬性的時候 就把他們的名稱當做屬性來使用

注意:

  1. 計算屬性(方法)在引用時一定不要加() 直接把它當做普通屬性去使用就好了
  2. 只要計算屬性這個function內部所用到的任何data中的數據發生了變化 就會重新計算這個計算屬性的值
  3. 計算屬性的求職結果會被保存起來 方便下次直接使用 如果計算屬性方法中所依賴的任何數據都沒有發生變化 則不會重新對計算屬性 求職 這個可以提高運行效率
  4. 計算屬性中必須有return
<body>
    <div id="app">
        <input type="text" v-model="firstname" >+
        <input type="text" v-model="lastname" >=
        <input type="text" v-model="fullname" >
        <p>{{fullname}}</p>
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                firstname: '',
                lastname: ''
            },
            methods: {},
            computed: {
                
                fullname: function () {
                    console.log('計算fullname被調用次數')
                    return this.firstname + '-' + this.lastname
                }
            }
        })
    </script>
</body>

二、三種方法之間的比較

  1. computed屬性會被緩存 除非依賴的響應式屬性變化才會重新被計算 主要當做屬性來使用
  2. methods方法表示一個具體的操作 主要書寫業務邏輯
  3. watch一個對象 鍵是需要觀察的表達式 值是對應的回調函數 主要用來監聽某些特定數據的變化 從而進行某些具體的業務邏輯操作 可以看做是computed和methods的結合體


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM