Vue2计算属性和侦听

简介: Vue2计算属性和侦听

计算属性computed

计算属性,方法名可以直接在对象中使用.这个属性是通过计算得出的。 这个方法中的任意属性改变,都会触发这个方法 使用场景:希望把一些计算的业务逻辑放在方法中,例如:全名计算、地址计算、购物车合计

下面的示例,我们使用了三种方式:

  • 使用方法实现
  • 使用vue的computed读写方式实现
  • 使用vue的computed只读方式实现

注意:推荐使用computed的方式。有缓存机制。在页面重复调用多次的情况下,只执行一次

<body>
    <div id="app">
        姓:<input type="text" v-model="firstName"> <br>
        名:<input type="text" v-model="lastName"> <br>
        全名:<input type="text" v-model="getFullName()"><br>
        全名:<input type="text" v-model="fullName"><br>
        全名:<input type="text" v-model="fullNameReadOnly"><br>
    </div>
</body>
<script src="./js/vue2.js"></script>
<script>
    var app = new Vue({
        el: '#app', // 用于指定当前vue实例为哪个容器使用,值为css选择器字符串
        data() {
            return {
                firstName:'张',
                lastName:'三',
            }
        },
        methods:{
            getFullName(){
                return this.firstName+"-"+this.lastName
            }
        },
        computed:{
            fullName:{
                // 读
                get(){
                    return this.firstName+"-"+this.lastName 
                },
                // 写
                set(value){
                    this.firstName = value.split("-")[0]
                    this.lastName = value.split("-")[1]
                }
            },
            // 只读方式的简写
            fullNameReadOnly(){
                return this.firstName+"-"+this.lastName 
            }
        }
    });
</script>

侦听属性watch

// 前面在data中要定义好两个属性:plan、isSunny
watch:{
    // 监听isSunny属性,当isSunny属性改变时,执行对应的代码
    isSunny:{
        immediate:true,     // 开启初始化调用
            deep:true,      // 开启深度监视
                handler(newVal,oldVal){
                // 晴天打篮球,否则写代码
                this.plan = this.isSunny ? "打篮球" : "写代码"
                console.log('新的数据:'+newVal);
                console.log('旧的数据:'+oldVal);
            }
    },
    // 监听复杂数据的某个属性,这也是一种简写方式
    "person.name"(newVal,oldVal){
        console.log('新的数据:'+newVal);
        console.log('旧的数据:'+oldVal);
     }
}
  • 被监视的属性发生改变时,调用回调函数,执行相关操作
  • 配置immediate:true实现初始化调用
  • 监视的属性须存在才能进行监视

完整代码

<body>
    <div id="app">
        <div>
            <input type="text" v-model="firetName">
            <input type="text" v-model="lastname"><br>
            <input type="text" v-model="getFullName()"><br>
            <input type="text" v-model="fullNameReadonly"><br>
            <input type="text" v-model="funName">
        </div>
    </div>
</body>
<script src="../js/vue2.7.js"></script>
<script>
    var app=new Vue({
        el:"#app",
        data(){
            return{
                firetName:"科比",
                lastname:"布莱恩特",
                isSunny:true,
                person:{
                    age:18,
                    name:'光头'
                }
            }
        },
        methods:{
            getFullName(){
                return this.firetName+"."+this.lastname
            }
        },
        computed:{
            //只读方式的简写,写到computed,有缓存
            fullNameReadonly(){
                return this.firetName+"."+this.lastname
            },
            funName:{
                get(){
                    return this.firetName+"."+this.lastname
                },
                set(value){
                    this.firetName=value.split(".")[0]
                    this.lastname=value.split(".")[1]
                }
            }
        },
        watch:{
            //表示要对isSunny这个属性进行侦听
            isSunny(newVal,oldval){
                console.log("改变了",oldval,newVal);
            },
            //深度监听可以用来监听整个随性的改变,但要慎用,因为
            person:{
                immediate:true,
                deep:true,
                handler(newVal,oldval){
                    console.log("改变了",newVal,oldval);
                }
            },
            "person.name"(newVal,oldval){
                console.log("我也侦听到了");
            }
        }
    })
</script>


相关文章
|
4月前
|
JavaScript API
Vue3中的计算属性能否动态修改
【9月更文挑战第5天】Vue3中的计算属性能否动态修改
301 10
|
2月前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
3月前
|
JavaScript API
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
73 1
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
|
3月前
|
监控 JavaScript 开发者
在 Vue 中,子组件为何不可以修改父组件传递的 Prop,如果修改了,Vue 是如何监控到属性的修改并给出警告的
在 Vue 中,子组件不能直接修改父组件传递的 Prop,以确保数据流的单向性和可预测性。如果子组件尝试修改 Prop,Vue 会通过响应式系统检测到这一变化,并在控制台发出警告,提示开发者避免这种操作。
|
4月前
|
缓存 JavaScript 前端开发
vue-day02计算属性,v-bind,v-if,v-for
文章介绍了Vue.js中的计算属性、class与style的绑定、条件渲染和列表渲染的使用。通过示例代码展示了如何使用计算属性简化模板逻辑、如何通过v-bind动态绑定class和style、如何使用v-if进行条件渲染以及如何使用v-for进行列表渲染。这些特性使得Vue.js在构建动态用户界面时更加灵活和强大。
vue-day02计算属性,v-bind,v-if,v-for
|
3月前
|
JavaScript 前端开发 开发者
VUE学习一:初识VUE、指令、动态绑定、计算属性
这篇文章主要介绍了Vue.js的基础知识,包括初识Vue、指令如v-for、v-on的使用、动态属性绑定(v-bind)、计算属性等概念与实践示例。
68 1
|
3月前
|
缓存 JavaScript 前端开发
探索Vue.js中的计算属性与侦听器
【10月更文挑战第5天】探索Vue.js中的计算属性与侦听器
31 1
|
3月前
|
缓存 JavaScript
|
3月前
|
缓存 JavaScript Serverless
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
179 0
|
4月前
|
JavaScript
vue 计算属性,实现复选框的全选和反选 【小案例】
本文通过一个Vue.js小案例,展示了如何使用计算属性实现复选框的全选和反选功能。计算属性的完整写法包括get和set两部分,分别用于获取值和设置值。在全选和反选的场景中,计算属性的get方法用于判断所有复选框是否都已选中,从而控制全选复选框的状态;计算属性的set方法则用于根据全选复选框的状态,批量更新每个复选框的选中状态。通过示例代码和效果图,文章清晰地说明了计算属性在实现这一功能中的作用和效果。
vue 计算属性,实现复选框的全选和反选 【小案例】

热门文章

最新文章