Options的进阶属性

2022-05-05  本文已影响0人  Sharp丶TJ
computed -—计算属性

1、用途
被计算出来的属性就是计算属性
例一:用户名展示
例二:列表展示
2、缓存
如果依赖的属性没有变化,就不会重新计算
getter / setter 默认不会做缓存,但是Vue做了特殊的处理,可以缓存


watch — 侦听、监听

1、用途
当数据变化时,执行一个函数。(当你需要做的东西是为了执行一个函数的时候才使用 watch,只是为了得到一个结果的话,还是使用 computed 更好)

例一:撤销
例二:模拟computed(但是这样做你为什么不直接使用 computed 呢)

2、watch 的 deep 属性
作用:如果你的需求需要在 watch 中 任何一个 复杂类型(对象) 下的属性变了,都相当于这个对象变了。这个时候才会使用 deep 属性

new Vue({
  data: {
    n: 0,
    obj: {
      a: "a"
    }
  },
  template: `
    <div>
      <button @click="n += 1">n+1</button>
      <button @click="obj.a += 'hi'">obj.a + 'hi'</button>
      <button @click="obj = {a:'a'}">obj = 新对象</button>
    </div>
  `,
  watch: {
    n() {
      console.log("n 变了");
    },
    obj() {
     handler(){
       console.log("obj 变了");
    },
      deep: true //告诉你obj也跟着变了。 deep 就是:监听obj的时候是否深入进去看。(不深入就只会看地址)
    },
    "obj.a": function() {
      console.log("obj.a 变了");
    }
  }
}).$mount("#app");

3、 watch 的 immediate 属性
immediate 表示是否在第一次渲染的时候执行这个函数(由于 watch 的特性如果不设置 immediate 是不会在第一次渲染中就触发 watch 的)

    "user.email": {
      handler: "changed",
      immediate: true // 第一次渲染 触发 watch
    },

4、语法(推荐看文档
(1)语法1:
①:

watch:{
( )=>{ }, //不推荐使用因为这是箭头函数,此刻这里的 this 是全局对象, this 没懂去看博客
}

②:

watch:{
function(value, oldValue){ },
}

③:

watch:{
( ){ },
}

④:

watch:{
[f1, f2],
}

⑤:

watch:{
'methodName',
}

⑥:

watch:{
{handler:fn, deep:true, immediate:true},
'object.a': function(){}
}

(2)语法2:
vm.$watch('xxx', fn, {deep: .. , immediate: ..})//其中 'xxx' 可以改为一个返回字符串的函数


computed 和 watch 的区别(总结)

答:
computed 是计算属性的意思, watch 就是监听的意思。computed 是用来计算出一个值的,这个值我们在调用的时候不需要加括号,可以当属性项用,它可以根据依赖自动缓存,如果依赖不变的话 computed 的值就不需要重新计算。
watch 是用来监听的,有两个选项。一个是immediate 表示第一次渲染的时候是否要执行这个函数;另一个是 deep 意思就是如果我们监听一个对象,我们是否要看这个对象内部的变化。它的定义就是如果某个数据变化了,就要去执行一个函数。

上一篇 下一篇

猜你喜欢

热点阅读