Vue学习--计算属性与侦听器

vue之所以加载速度非常块,是因为在数据改变时,它并不是将所有组件都刷新,而是在重用代码的基础上对发生改变的地方进行渲染。同时,还得益于计算属性的使用:

1、计算属性

像绑定普通属性一样在模板中绑定计算属性。例如reverseName属性依赖于firstName和lastName,当firstName或lastName发生改变时,依赖于它的 reverseName 也会更新。

利用函数方法也可以实现类似的效果,不同的是计算属性是基于它们的依赖进行缓存的。只有在它的相关依赖发生改变时才会重新求值。这就意味着只要 firstName 还没有发生改变,再次访问 reversedName 计算属性会立即返回之前的计算结果,而不必再次执行函数。相比之下,每当触发重新渲染时,调用方法将总会再次执行函数.

为什么需要缓存?假设我们有一个性能开销比较大的的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性 B 依赖于 A 。如果使用函数,每获得一次B就要调用一次函数进行计算,造成很大开销!

计算属性默认为get方法,也可以设定set方法,接收传入处理数据。例如传入originalName,set方法对其进行拆解并复制给firstName与lastName,并引起firstName与lastName改变,调用get()方法。

    <div id="app">
        <p>{{originalName}}</p>
        <p>{{reverseName}}</p>
        <button @click="deal()">反转名字</button>
    </div>
         let vue=new Vue({
                el:'#app',
                data:{
                    firstName:'',
                    lastName:'',
                    originalName:"super tory"
                },
                methods:{
                    deal(){
                        this.reverseName=this.originalName;
                    }
                },
                computed:{                        //计算属性钩子
                    reverseName:{
                        set(string){    //通过set方法对传入参数this.originalName进行操作
                            let name=string.split(' ');
                            this.firstName=name[1];
                            this.lastName=name[0];
                        },
                        get(){            //通过get方法返回值
                            return this.firstName+' '+this.lastName;
                        }
                    }
                }
        });

2、侦听器watch

       在Vue中提供一个钩子,侦听data中的某个变量是否改变,如果改变则执行响应函数。

    <div id="app2">
        <input v-model="listen">
    </div>
        let vue2=new Vue({
            el:'#app2',
            data:{
                listen:''
            },
            watch:{            //定义侦听器钩子
                listen:function () {    //定义函数侦听listen的变化
                    console.log("input内容发生改变");
                }
            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值