vue的計算屬性與方法的不同


計算屬性

vue的模板里可以使用表達式,但是它的設計初衷是用於簡單計算,在模板中放入太多邏輯會讓模板過重且難以維護。例如:

<div id="example">
  {{ message.split('').reverse().join('') }}
</div>

這里很難一眼看出是要顯示什么,而且要多次使用的話也很麻煩,因此對於復雜邏輯應使用計算屬性


錯誤示例 ```html Title

{{ message.split('').reverse().join('') }}


<br>
正確寫法
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 開發環境版本,包含了有幫助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
    <!--   直接使用方法名就行,不用加括號   -->
    <p>{{ reversedMessage }}</p>
</div>
<script>
    //建議vue的變量命與作用的標簽id一致
    let app = new Vue({
        el: "#app",  //關聯dom對象
        data: {
            message: 'I have a dream'   //模板使用的數據
        },
        //定義計算屬性
        computed: {
            // 在computed里定義方法,使用的時候直接寫方法名
            reversedMessage: function () {
                // `this` 指向 app 實例,data里面的數據可以直接獲取到htis.message
                return this.message.split('').reverse().join('')
            }
        }
    })

</script>
</body>
</html>


## 計算屬性與方法的不同

上述例子中也可以通過調用方法來達到同樣的目的

在組件中定義方法

// 在組件中
methods: {
  reversedMessage: function () {
    return this.message.split('').reverse().join('')
  }
}

調用方法

<p>Reversed message: "{{ reversedMessage() }}"</p>

就得到的結果而言,兩種方式是完全一致的。但是不同的是,計算屬性是基於它們的依賴進行緩存的,也就是說,計算屬性只有在它的相關依賴發生改變時才會重新求值,對於上述的例子,只要message不發生改變,多次訪問reversedMessage計算屬性會立即返回結果而不必再次執行函數


下面我們來驗證這個結論 ```html Title

使用計算屬性

{{reversedMessage}}

<hr>


<p>使用方法</p>
<p>{{reversedMessageMethod()}}</p>
```
打開html,右鍵檢查-console


## 小結 - 模板內表達式包含復雜邏輯時,應使用計算屬性 - 只要計算屬性使用的數據不發生變化,計算屬性就不會執行,而是直接使用緩存


免責聲明!

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



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