1. 程式人生 > >Vue.js 計算屬性

Vue.js 計算屬性

.com 相關 ive 都是 aid his ejs value body

Vue.js 計算屬性

使用計算屬性的實例:

<!DOCTYPE html>
<html>
    <head>
        <meta cahrset="utf-8">
        <title>computed</title>
        <script src="vue.min.js"></script>
    </head>
    <body>
        <div id="app">
            <p>原始字符串:{{message}}</p>
            <p>反轉後字符串{{reversedMessage}}</p>
        </div>
        <script>
        var vm = new Vue({
            el: ‘#app‘,
            data: {
                message: ‘Runoob‘
            },
            computed: {
                // 計算屬性的 getter
                reversedMessage :function(){
                    // `this` 指向 vm 實例
                    return this.message.split(‘‘).reverse().join(‘‘)
                }
            }
        })
        </script>
    </body>
</html>

提供的函數將用作屬性 vm.reversedMessage 的 getter 。 vm.reversedMessage 依賴於 vm.message,在 vm.message 發生改變時,vm.reversedMessage 也會更新。

computed vs methods

我們可以使用 methods 來替代 computed,效果上兩個都是一樣的,但是 computed 是基於它的依賴緩存,只有相關依賴發生改變時才會重新取值。而使用 methods ,在重新渲染的時候,函數總會重新調用執行。

<!DOCTYPE html>
<html>
    <head>
        <meta cahrset="utf-8">
        <title>computed</title>
        <script src="vue.min.js"></script>
    </head>
    <body>
        <div id="app">
            <p>原始字符串:{{message}}</p>
            <p>反轉後字符串{{reversedMessage()}}</p>
        </div>
        <script>
        var vm = new Vue({
            el: ‘#app‘,
            data: {
                message: ‘Runoob‘
            },
            methods: {
                reversedMessage: function () {
                return this.message.split(‘‘).reverse().join(‘‘)
                }
            }
        })
        </script>
    </body>
</html>
  • 可以說使用 computed 性能會更好,但是如果你不希望緩存,你可以使用 methods 屬性。

computed setter

computed 屬性默認只有 getter ,不過在需要時你也可以提供一個 setter :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>getters of computed</title>
        <script src="vue.min.js"></script>
    </head>
    <body>
        <div id="app">
            <p>{{site}}</p>
        </div>
        <script>
        var vm = new Vue({
            el: ‘#app‘,
            data: {
                name: ‘Google‘,
                url: ‘http://www.google.com‘
            },
            computed: {
                site: {
                    // getter
                    get: function(){
                        return this.name + ‘ ‘ + this.url
                    },
                    // setter
                    set: function(newValue){
                        var names = newValue.split(‘ ‘)
                        this.name = names[0]
                        this.url = names[names.length - 1]
                    }
                }
            }
        })
        // 調用 setter, vm.name 和 vm.url 也會被對應更新
        vm.site = ‘百度 www.baidu.com‘;
        document.write(‘name:‘ + vm.name);
        document.write(‘<br>‘);
        document.write(‘url: ‘ + vm.url);
        </script>
    </body>
</html>

Vue.js 計算屬性