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 相关文章推荐
VBScript版代码高亮
Jun 26 Javascript
Document 对象的常用方法
Jul 31 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
Sep 30 Javascript
分析了一下JQuery中的extend方法实现原理
Feb 27 Javascript
jquery滚动加载数据的方法
Mar 09 Javascript
jquery实现表格隔行换色效果
Nov 19 Javascript
jQuery插件编写步骤详解
Jun 03 Javascript
正则验证小数点后面只能有两位数的方法
Feb 28 Javascript
JS实现复制功能
Mar 01 Javascript
JavaScript中严格判断NaN的方法
Feb 16 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
Mar 04 Javascript
微信小程序如何实现全局重新加载
Jun 05 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
session在PHP大型web应用中的使用
2011/06/25 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
PHP date()格式MySQL中插入datetime方法
2019/01/29 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
setAttribute 与 class冲突解决
2008/02/17 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
javascript 闭包详解
2015/02/15 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
django 删除数据库表后重新同步的方法
2018/05/27 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
PyQt5响应回车事件的方法
2019/06/25 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
超市优秀员工事迹材料
2014/05/01 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
校园安全广播稿范文
2014/09/25 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
文明家庭事迹材料
2014/12/20 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
导游词之江南周庄
2019/12/06 职场文书