Vue.js计算属性computed与watch(5)


Posted in Javascript onDecember 09, 2016

在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作。模板是为了描述视图的结构。在模板中放入太多的逻辑会让模板过重且难以维护。这就是为什么 Vue.js 将绑定表达式限制为一个表达式。如果需要多于一个表达式的逻辑,应当使用**计算属性**。

Vue实例的computed的属性

<div class="test">
    <p>原始的信息{{message}}</p>
    <p>计算后的信息{{ComputedMessage}}</p>
  </div>

js代码

var myVue = new Vue({
    el: ".test",
    data: {
      message:12
    },
    computed:{
      ComputedMessage:function () {
        return this.message+10;
      }
    }
  });

界面会显示 12 和 22
上述的方式是一种缓冲的实现的效果,这种实现的方式依赖于它的缓寸,计算得到的属性只有在相关依赖(message)改变的时候才会重新取值,这就意味着只要message没有发生改变的时候,多次访问ComputedMessage都不会再重新执行计算的这个属性。。

计算后的ComputedMessage属性始终是依赖于message的

通过调用函数实现同样的效果

<div class="test">
    <p>原始的信息{{message}}</p>
    <p>计算后的信息{{MessageFunction()}}</p>
  </div>

js代码

var myVue = new Vue({
    el: ".test",
    data: {
      message:12
    },
    methods:{
      MessageFunction:function () {
        return this.message+10;
      }
    }
  });

得到的结果和上面的结果是一样的,但是每次被重新渲染的时候都会被重新调用。
所以使用上述两种方式的时候,首先要确定你是否需要借助缓存

使用vue实例的watch

这个没有看懂呀
但是使用computed这个属性更加的方便和快捷

<div class="test">
    <p>原始的信息{{fullName}}</p>
  </div>

js代码

var myVue = new Vue({
    el: ".test",
    data: {
      firstName:"fur",
      lastName:"bool"
    },
    computed:{
      fullName:function () {
        return this.firstName+this.lastName
      }
    }
  });

而且你可以computed属性设置setter getter是默认就有的。

演示set和get的调用过程

<div class="test">
    <p>原始的信息{{fullName}}</p>
    <button @click="fu">test</button>
  </div>

js代码

var myVue = new Vue({
    el: ".test",
    data: {
      firstName:"fur",
      lastName:"bool",
      fullName:"sasas dsdsd dsds"
    },
    computed:{
      fullName:{
        get:function () {
          console.log("get")
          return this.firstName+this.lastName
        },
        set:function(value){
          var names=value.split(" ");
          this.firstName=names[0];
          this.lastName=names[names.length-1];
          console.log("set");
        }
      }
    },
    methods:{
      fu:function () {
        myVue.fullName="sasas dsdsd dsds";
        console.log(myVue.firstName);   //sasas
        console.log(myVue.lastName);  //dsds
      }
    }
  });

首先会输出get;

在点击按钮为fullName赋值的时候首先调用set 再调用get方法。

自定义的Watcher

虽然计算属性在大多数情况下是非常合适的,但是有的时候也需要自定义一个watcher。这是因为你想要在数据变化响应的时候,执行异步操作胡总和其他的操作是非常有用的。

Javascript 相关文章推荐
js+CSS 图片等比缩小并垂直居中实现代码
Dec 01 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
Apr 07 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
Oct 20 Javascript
关于Javascript作用域链的八点总结
Dec 06 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
Dec 19 Javascript
Angular 4.x中表单Reactive Forms详解
Apr 25 Javascript
JS实现将链接生成二维码并转为图片的方法
Mar 17 Javascript
如何换个角度使用VUE过滤器详解
Sep 11 Javascript
vue使用axios实现excel文件下载的功能
Jul 16 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
Jan 13 Vue.js
浅谈JS的原型和原型链
Jun 04 Javascript
JS新包管理工具yarn和npm的对比与使用入门
Dec 09 #Javascript
清除浏览器缓存的几种方法总结(必看)
Dec 09 #Javascript
vue.js绑定class和style样式(6)
Dec 09 #Javascript
浅析JavaScript动画模拟拖拽原理
Dec 09 #Javascript
JS定时器实现数值从0到10来回变化
Dec 09 #Javascript
原生js实现查询天气小应用
Dec 09 #Javascript
JS实现太极旋转思路分析
Dec 09 #Javascript
You might like
PHP用户指南-cookies部分
2006/10/09 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
最新最全PHP生成制作验证码代码详解(推荐)
2016/06/12 PHP
PHP与以太坊交互详解
2018/08/24 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
jQuery each和js forEach用法比较
2019/02/27 jQuery
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
使用Python编写Linux系统守护进程实例
2015/02/03 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
Python算法应用实战之栈详解
2017/02/04 Python
Numpy中的mask的使用
2018/07/21 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
Python中print函数简单使用总结
2019/08/05 Python
Python使用python-docx读写word文档
2019/08/26 Python
Python中if有多个条件处理方法
2020/02/26 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
九年级体育教学反思
2014/01/23 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
五年级上册复习计划
2015/01/19 职场文书
高一地理教学工作总结
2015/08/12 职场文书
spring cloud 配置中心native配置方式
2021/09/25 Java/Android
进行数据处理的6个 Python 代码块分享
2022/04/06 Python