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 相关文章推荐
For循环中分号隔开的3部分的执行顺序探讨
May 27 Javascript
js中的如何定位固定层的位置
Jun 15 Javascript
IE中getElementsByName()对有些元素无效的解决方案
Sep 28 Javascript
Node.js事件驱动
Jun 18 Javascript
jQuery链式操作实例分析
Nov 16 Javascript
jQuery实现的倒计时效果实例小结
Apr 16 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
Oct 19 Javascript
js date 格式化
Feb 15 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
Feb 24 Javascript
详解vue中引入stylus及报错解决方法
Sep 22 Javascript
vue实现鼠标移过出现下拉二级菜单功能
Dec 12 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
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 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
JS 显示当前日期与时间的代码
2010/03/24 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
2019/11/12 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
Python中的 enum 模块源码详析
2019/01/09 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
Python如何实现FTP功能
2020/05/28 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
Whistles官网:英国女装品牌
2020/08/14 全球购物
Unix控制后台进程都有哪些进程
2016/09/22 面试题
学生会生活部工作总结2015
2015/03/31 职场文书
KVM基础命令详解
2022/04/30 Servers
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL