vue基础——计算属性、侦听器

计算属性

<script type="module">
import {createApp} from './js/vue.esm-browser.js';
let app=createApp({
 data(){
  return{}
 },
 methods:{
 },
 //设置计算属性
 computed:{
 }

每一个计算属性,实质上都包含 get和set两个方法,默认是get方法
在计算属性的get方法中,不要异步请求数据(ajax)或者操作dom
给计算属性设置值的时候,执行的是 set方法
从计算属性获取值的时候,执行的是 get方法

计算属性的优点:
1.数据没有发生变化的时候,优先读取缓存在 computed 中,经过逻辑运算操作的数据,把数据渲染在dom树中,并且不用考虑 methods和watch中数据的变化计算属性值会基于其响应式依赖被缓存
2.它有get方法和set方法,可以进行灵活设置
get 在获取的时候被触发,如果没有set,则默认是get
set 在数据设置的时候被触发

侦听器

书写侦听器的方法,方法名就是侦听器侦听data数据中数据的属性名,该方法具有两个参数:
第一个参数是 数据当前的值(新值)
第二个参数是 数据变化之前的值(老值)

<body>
    <div id="app"> 
        <p :style="{color:col,fontSize:'30px'}">{{num}}</p>
        <button @click="change">点击++</button><br/>

        <input type="text" v-model="val"> <br/>

        <input type="text" v-model="name">
        <hr/>
        <h1>{{obj.name}}</h1>
        <button @click="changeName">改变name</button>

    </div>
</body>
</html>
<script type="module">
/*
如果需要根据数据的变化来执行操作,可以使用数据侦听器
*/
import {createApp} from './js/vue.esm-browser.js';
let app=createApp({
    data(){
        return{
            col:'#04be02',
            num:100,
            val:'无中生有',
            name:'展昭',
            obj:{
                name:'包拯',
                age:20,
                nickname:'文正'
            }
        }
    },
    methods:{
        rand(m,n){
            return Math.floor(Math.random()*(n-m+1)+m);
        },
        change(){
            this.num+=5;
        },
        changeName(){
            this.obj.name='包青天';
        }
    },
    computed:{

    },
    watch:{
        /*
        书写侦听器的方法,方法名就是侦听器侦听data数据中数据的属性名,该方法具有两个参数,
        第一个参数是 数据当前的值(新值)
        第二个参数是 数据变化之前的值(老值)
        */
        num(newVal,oldVal){
        let r=this.rand(0,255);
        let g=this.rand(0,255);
        let b=this.rand(0,255);
        console.log(newVal,oldVal);
        if(newVal%10==0){
            this.col=`rgb(${r},${g},${b})`;
        }
        },
        val(newVal,oldVal){
            console.log(newVal,oldVal);
        },
        //设置监听器的深度监听
        obj:{
            handler(newVal,oldVal){
            console.log(newVal,oldVal);
        },
        //设置深度监听
        deep:true,
        //设置加载立即监听
        immediate:true
    },
    //监听对象中某一个属性的变化
    //可以通过此方法,直接监听路由对象变化
    'obj.name'(newVal,oldVal){
        console.log('监听name的变化');
        console.log(newVal,oldVal);
    }
    }
}).mount('#app');

//可以设置外部的监听器
app.$watch('name',(newVal,oldVal)=>{
    console.log(newVal,oldVal);
});
</script>

Vue.js中,计算属性(Computed Properties)和监听器(Methods or Event Listeners)有以下几个关键区别: 1. **目的**: - 计算属性主要用于基于数据动态地生成新的值。它们通常是简单的数学运算、函数调用或复杂表达式的组合结果,一旦依赖的数据改变,计算属性会自动更新其值。 - 监听器则是响应用户的输入事件或者其他数据变化,执行特定的操作,如数据修改、DOM操作等。 2. **触发时机**: - 计算属性是在需要获取其值时才计算的,而不会频繁地去检查数据源是否发生变化。当数据源发生变化时,它会被自动重置。 - 监听器则是在特定事件发生时主动执行,例如点击按钮、表单提交或数据发生变化时。 3. **返回值**: - 计算属性通常用于提供读取式的计算结果,它本身并不影响数据模型的状态,只是对外提供一个视图层的表示。 - 监听器可能会直接修改数据,因此它们通常包含了副作用,比如对状态的直接操作。 4. **模板绑定**: - 计算属性可以直接在模板上绑定使用 `<div>{{ computedValue }}</div>`,显示实时更新的结果。 - 监听器一般通过`v-on`指令与事件处理函数关联,例如 `@keyup.enter="handleInput"` 5. **性能优化**: - 使用计算属性可以利用Vue的缓存机制,避免不必要的计算。如果只关心某个值的最终结果,而不关心它是如何得出的,计算属性是一个好选择。 - 监听器每次都会运行,对于频繁的事件处理,可能会影响性能,所以应谨慎使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值