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 相关文章推荐
TinyMCE 新增本地图片上传功能
Nov 05 Javascript
jquery 定位input元素的几种方法小结
Jul 28 Javascript
Jquery getJSON方法详细分析
Dec 26 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
Nov 18 Javascript
javascript运算符——逻辑运算符全面解析
Jun 27 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
Jul 04 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
Sep 18 Javascript
vue结合Echarts实现点击高亮效果的示例
Mar 17 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
Dec 03 Javascript
实例讲解v-if和v-show的区别
Jan 31 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
Apr 09 Javascript
vue 子组件watch监听不到prop的解决
Aug 09 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中的PHP_EOL换行符详细解析
2013/10/26 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
node中IO以及定时器优先级详解
2019/05/10 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
Python Socket编程详细介绍
2017/03/23 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
Python实现常见的回文字符串算法
2018/11/14 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
python操作ini类型配置文件的实例教程
2020/10/30 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
党员志愿者活动方案
2014/08/28 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
月考总结与反思
2015/10/22 职场文书
《穷人》教学反思
2016/02/19 职场文书
python pyhs2 的安装操作
2021/04/07 Python
详解Python requests模块
2021/06/21 Python
Python OpenGL基本配置方式
2022/05/20 Python
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers