Vue计算属性和侦听器-计算属性-计算属性缓存 vs 方法

Vue / 508人浏览 / 0人评论

你可能已经注意到我们可以通过在表达式中调用方法来达到同样的效果

Vue.js 是什么?

Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

如果你已经是有经验的前端开发者,想知道 Vue 与其它库/框架有哪些区别,请查看对比其它框架。

Vue计算属性和侦听器-计算属性-计算属性缓存 vs 方法

以下代码是保存至一个index.html的文档(文件后缀名是.html)中,并非是.vue的文件,当今后学会了一些更vue复杂的应用的时候,比如CLI创建了更复杂的vue应用,并支持单文件组件,那在项目下创建的文件可能就是以.vue为后缀的文件。

你可能已经注意到我们可以通过在表达式中调用方法来达到同样的效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue计算属性和侦听器-计算属性-计算属性缓存 vs 方法</title>
    <script src="vue.js" type="text/javascript" charset="utf-8"></script>    
</head>
<body>
    <div id="app">
        <h2>计算属性缓存 vs 方法</h2>
        <!--
        你可能已经注意到我们可以通过在表达式中调用方法来达到同样的效果:
        -->
        <div id="example">
            <p>Reversed message: "{{ reversedMessage() }}"</p>            
        </div>
        <!--
        // 在组件中
        methods: {
          reversedMessage: function () {
            return this.message.split('').reverse().join('')
          }
        }
        -->
        <!--
        我们可以将同一函数定义为一个方法而不是一个计算属性。
        两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存的。
        只在相关响应式依赖发生改变时它们才会重新求值。
        这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。            
        -->
        <!--
        这也同样意味着下面的计算属性将不再更新,因为 Date.now() 不是响应式依赖:
        -->
        <!--
        computed: {
            now: function () {
              return Date.now()
            }
        }
        -->
        <!--
        相比之下,每当触发重新渲染时,调用方法将总会再次执行函数。
        我们为什么需要缓存?假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。
        然后我们可能有其他的计算属性依赖于 A。
        如果没有缓存,我们将不可避免的多次执行 A 的 getter!如果你不希望有缓存,请用方法来替代。 
        -->       
    </div>
    <script type="text/javascript">
        var vm = new Vue({
            el: '#app',
            data: {
                message: 'Hello Vue!',
                site_url: 'http://www.fxzbcn.com',
                sitename: '编程之吧',
                seen: true,
                attributename: 'href',
                eventname: 'click',
                value: 'color:red;',
                key: 'href',
                event: 'click'
            },
            computed: {
                // 计算属性的 getter
                reversedMessage: function () {                   
                    // `this` 指向 vm 实例
                    return this.message.split('').reverse().join('')
                }
            },           
            methods:{
                onSubmit: function(){
                    // 阻止默认表单提交
                    // 做你自己想做的事,比如ajax请求后台数据
                    return false;
                },
                doSomething: function(){
                    console.log(this);
                }
            }
        });
    </script>
</body>
</html>

转载注明:

0 条评论

还没有人发表评论

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我