Vue的watch和computed方法的使用及区别介绍


Posted in Javascript onSeptember 06, 2018

Vue的watch属性

Vue的watch属性可以用来监听data属性中数据的变化

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script src="lib/vue.min.js"></script>
    <script src="lib/vue-router-3.0.1.js"></script>
  </head>
  <body>
    <div id="app">
      <input type="text" v-model="firstname" />
    </div>
    <script type="text/javascript">
      var vm = new Vue({
        el:"#app",
        data:{
          firstname:"",
          lastname:""
        },
        methods:{},
        watch:{
          firstname:function(){
            console.log(this.firstname)
          }
        }
      })
    </script>
  </body>
</html>

可以从上述代码中实践得知,输入框内的值变化多少次,控制台就会打印多少次

同时还可以直接在监听的function中使用参数来获取新值与旧值

watch:{
          firstname:function(newValue,OldValue){
            console.log(newValue);
            console.log(OldValue);
          }
        }

其中第一个参数是新值,第二个参数是旧值

同时Watch还可以被用来监听路由router的变化,只是这里的监听的元素是固定的

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script src="lib/vue.min.js"></script>
    <script src="lib/vue-router-3.0.1.js"></script>
    <style type="text/css">
    </style>
  </head>
  <body>
    
    <div id="app">
      <!--
        由于Vue-router的hash匹配原则所以我们需要在原定义的路径上加一个#号
      -->
<!--      <a href="#/login" rel="external nofollow" >登录</a>
      <a href="#/register" rel="external nofollow" >注册</a>-->
      <router-link to="/login" tag="span">登录</router-link>
      <router-link to="/register">注册</router-link>
      <router-view></router-view>
    </div>
  </body>
  <script>
    var login={
      template:'<h1>登录组件</h1>'
    }
    var register={
      template:'<h1>注册组件</h1>'
    }
    var routerObj = new VueRouter({
      routes:[
      //此处的component只能使用组件对象,而不能使用注册的模板的名称
        {path:"/login",component:login},
        {path:"/register",component:register}
      ]
    })
    var vm = new Vue({
      el:'#app',
      data:{
      },
      methods:{
        
      },
      router:routerObj,//将路由规则对象注册到VM实例上
      watch:{
        '$route.path':function(newValue,OldValue){
            console.log(newValue);
            console.log(OldValue);
        }
      }
    })
  </script>
</html>

计算属性Computed的作用

computed属性的作用与watch类似,也可以监听属性的变化

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script src="lib/vue.min.js"></script>
    <script src="lib/vue-router-3.0.1.js"></script>
  </head>
  <body>
    <div id="app">
      <input type="text" v-model="firstname" />
      <input type="text" v-model="lastname" />
      <input type="text" v-model="fullname" />
    </div>
    <script type="text/javascript">
      var vm = new Vue({
        el:"#app",
        data:{
          firstname:"",
          lastname:""
        },
        methods:{},
/*       watch:{
          firstname:function(newValue,OldValue){
            console.log(newValue);
            console.log(OldValue);
          }
        }*/
        computed:{
          fullname:function(){
            return this.firstname +"-"+this.lastname
          }
        }
      })
    </script>
  </body>
</html>

只是他会根据他依赖的属性,生成一个属性,让vm对象可以使用这个属性

methods,watch,computed的区别

  1. computed 属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用;
  2. methods 方法表示一个具体的操作,主要书写业务逻辑;
  3. watch 一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作;可以看作是 computed 和 methods 的结合体;

总结

以上所述是小编给大家介绍的Vue的watch和computed方法的使用及区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js之WEB开发调试利器:Firebug 下载
Jan 13 Javascript
麦鸡的TAB切换功能结合了javascript和css
Dec 17 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
Oct 20 Javascript
MooTools 页面滚动浮动层智能定位实现代码
Aug 23 Javascript
JS声明变量背后的编译原理剖析
Dec 28 Javascript
Angular用来控制元素的展示与否的原生指令介绍
Jan 07 Javascript
javascript相关事件的几个概念
May 21 Javascript
JavaScript新增样式规则(推荐)
Jul 19 Javascript
jquery精度计算代码 jquery指定精确小数位
Feb 06 Javascript
Ajax和Comet技术总结
Feb 19 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
Dec 06 Javascript
使用JS实现动态时钟
Mar 12 Javascript
Vue-component全局注册实例
Sep 06 #Javascript
Vue 监听列表item渲染事件方法
Sep 06 #Javascript
在Vue组件中获取全局的点击事件方法
Sep 06 #Javascript
jQuery实现基本动画效果的方法详解
Sep 06 #jQuery
JavaScript函数、闭包、原型、面向对象学习笔记
Sep 06 #Javascript
Vue中使用clipboard实现复制功能
Sep 05 #Javascript
vue-cli3.0配置及使用注意事项详解
Sep 05 #Javascript
You might like
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
php 常用的系统函数
2017/02/07 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
原生js实现验证码功能
2017/03/16 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
员工廉洁自律承诺书
2014/05/26 职场文书
学校联谊协议书
2014/09/16 职场文书
客服专员岗位职责
2015/02/10 职场文书
开展警示教育活动总结
2015/05/09 职场文书
阿凡达观后感
2015/06/10 职场文书
高中化学教学反思
2016/02/22 职场文书
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS
Oracle中update和select 关联操作
2022/01/18 Oracle
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python