最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 《简述Vue 里面 computed 和 watch 的区别》

    正文概述 掘金(用户7118714082313)   2021-03-22   678

    computed 计算属性

    computed 是指计算属性; 它会根据所依赖的数据动态显示新的计算结果, 该计算结果会被缓存起来。computed 的值在 getter 执行后是会被缓存的。如果所依赖的数据发生改变时候, 就会重新调用 getter 来计算最新的结果。

    computed 是用来计算出一个值的,

    • 第一,这个值在调用的时候不用加(),
    • 第二,如果依赖不变,会自动缓存,computed 的值就不会重新计算
    const vm = new Vue({
      data: {
        message: 'hello'
      },
      template: `
        <div>
          <p>原始字符串:{{message}}</p>
          <p>反转后的字符串:{{reversedMessage}}</p>
        </div>
      `,
      computed: {
        reversedMessage() {
          return this.message.split('').reverse().join('')
        }
      }
    }).$mount("#app");
    

    watch 监听数据的变化

    watch 它是一个对 data 的数据监听回调, 当依赖的 data 的数据变化时, 会执行一个回调函数。在回调中会传入newVal和oldVal两个参数。

    new Vue({
      data: {
        message: "",
        name: "ry",
        age: 18
      },
      template: `
        <div>
          <p>个人信息: {{message}}</p>
          <p>年龄: <input type="text" v-model="age" /></p>
        </div>
      `,
      watch: {
        age(newValue, oldValue){
          this.message = this.name + " 今年 " + newValue + " 岁";
        }
      }
    }).$mount("#app");
    

    第一次页面初始化效果如下: 《简述Vue 里面 computed 和 watch 的区别》

    如上 watch 有一个特点是:

    • 第一次初始化页面的时候,是不会去执行 age 这个属性监听的,
    • 只有当 age 值发生改变的时候才会执行监听计算。因此我们上面第一次初始化页面的时候,message 属性值默认为空字符串。
    • 那么我们现在想要第一次初始化页面的时候也希望它能够执行 age 进行监听,因此我们需要修改下我们的 watch 的方法,需要引入 handler 方法和 immediate 属性

    handler 方法及 immediate 属性

    代码如下所示:

    new Vue({
      data: {
        message: "",
        name: "ry",
        age: 18
      },
      template: `
        <div>
          <p>个人信息: {{message}}</p>
          <p>年龄: <input type="text" v-model="age" /></p>
        </div>
      `,
      watch: {
        age: {
          handler(newValue, oldValue) {
            this.message = this.name + " 今年 " + newValue + " 岁";
          },
          immediate: true
        }
      }
    }).$mount("#app");
    

    如上代码, age 属性绑定了一个 handler 方法。其实我们之前的 watch 当中的方法默认就是这个 handler 方法。但是在这里我们使用了immediate: true,含义是: 如果在 watch 里面声明了 age 的话,就会立即执行里面的 handler 方法。如果 immediate 值为 false 的话,果就和之前的一样, 就不会立即执行 handler 这个方法的。因此设置了 mediate:true的话,一次页面加载的时候也会执行该 handler 函数的。即第一次 message 有值。

    因此第一次页面初始化效果如下:

    《简述Vue 里面 computed 和 watch 的区别》

    deep属性

    watch 面有一个属性为 deep,含义是:是否深度监听某个对象的值,值默认为 false

    new Vue({
      data: {
        obj: {
          message: "",
          name: "ry",
          age: 18
        }
      },
      template: `
        <div>
          <p>个人信息: {{message}}</p>
          <p>年龄: <input type="text" v-model="obj.age" /></p>
        </div>
      `,
      watch: {
        'obj': {
          handler(newValue, oldValue) {
            this.message = this.obj.name + " 今年 " + newValue.age + " 岁";
          },
          immediate: true,
          deep: true
        }
      }
    }).$mount("#app");
    

    如上代码, 如果不添加 deep: true 的话,当我们在输入框中输入值的时候,改变obj.age 值后,obj 对象中的 handler 函数是不会被执行到的。 Vue 不能检测到对象属性的添加或删除的。它只能监听到 obj 这个对象的变化。

    watch 和 computed 的区别是:

    相同点:他们两者都是观察页面数据变化的。

    不同点

    • computed 只有当依赖的数据变化时才会计算, 当数据没有变化时, 它会读取缓存数据。
    • watch 每次都需要执行函数。watch 更适用于数据变化时的异步操作。

    起源地下载网 » 《简述Vue 里面 computed 和 watch 的区别》

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元