二、vue3中的计算属性和侦听器以及过滤器

1.计算属性

vue3中可以继续使用vue2的语法,但是主要是可以用组合式api去写。

1.vue2写法

export default {
   data() {
      return {
        phonename:华为手机,
        price:5000
      }
    },
   methods: {
     updateName(){
      this.phonename = 苹果手机
    }
  },
  computed:{
    // 计算属性在定义的时候是方法,里面返回结果
    // 在使用时,是当做属性在用
    // phoneInfo(){
    //   return this.phonename+-+this.price
    // },
    // 如果计算属性需要修改,要定义完整形式
    phoneInfo:{
      get(){
        return this.phonename+-+this.price
      },
      set(val){
        let arr = val.split(-)
        this.phonename = arr[0]
        this.price = parseInt(arr[1])
      }
    }
  } 
}

2.组合式api写法

// 导入组合式API
import {computed, ref} from vue
export default {
  // vue3目前推崇的是组合式API写法
  setup() {
    // 定义数据
    const phonename = ref(华为手机)
    const price = ref(5000)
    //定义方法
    const updateName = ()=>{
      phonename.value = 苹果手机
    }
    //定义计算属性
    // 定义只读的计算属性
    // const phoneInfo = computed(()=>{
    //   return phonename.value+-+price.value
    // })
    // 定义可写的计算属性
    const phoneInfo = computed({
      get(){
        return phonename.value+-+price.value
      },
      set(val){
        let arr = val.split(-)
        phonename.value = arr[0]
        price.value = parseInt(arr[1])
      }
    })

    //返回模板中要用的数据
    return {
      phonename,
      price,
      updateName,
      phoneInfo
    }
  }
}

2.侦听器

// 引入组合式API watch 和 watchEffect
import {ref,reactive, watch, watchEffect} from vue

export default {
// Vue3中的侦听器
    setup() {
        let money = ref(10000)
        let stu = reactive({
            name:张三,
            age:20,
            car:{
                name:奔驰,
                price:50
            }
        })

        // watch方法的参数分别是:
        // 第一个参数:监视的成员
        // 第二个参数:回调函数
        // 第三个参数:配置对象 (可以省略)
        // 简单用法:一上来没有立刻执行
        // watch(money,(nval,oval)=>{
        //     console.log(nval,oval);
        // })
        // 完整用法:加上第三个参数,配置对象
        watch(money,(nval,oval)=>{
            console.log(nval,oval);
        },{
            //立刻执行
            immediate:true,
        })

        // 监视reactive的数据,默认就开启深度监视,并且无法关闭
        // watch(stu,(nval,oval)=>{
        //     console.log(nval,oval);
        // })

        // 对于reactive的数据,可以采用监视部分属性
        // 监视对象身上的属性,推荐用下面的方式
        watch(()=>stu.name,(nval,oval)=>{
            console.log(nval,oval);
        })

        // 如果监视的是reactive里面的对象属性,默认是不开启深度监视的,需要手动开启
        watch(()=>stu.car,(nval,oval)=>{
            console.log(nval,oval);
        },{
            deep:true
        })

        //watchEffect监听器,只有一个回调函数参数,并且没有参数
        // 特点:
        // 1.默认会执行一次
        // 2.不需要明确监视谁,回调函数里面用到了谁,谁变了,就会重新执行回调函数。
        watchEffect(()=>{
            console.log(我是watchEffect);
            let m = money.value
            let name = stu.name
        })

        return{
            money,
            stu
        }
    }
};

3.过滤器

Vue3推荐我们使用方法或计算属性的方式,实现之前过滤器的效果,所以vue3移除了过滤器。

经验分享 程序员 微信小程序 职场和发展