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 相关文章推荐
jQuery写fadeTo示例代码
Feb 21 Javascript
JQuery中Bind()事件用法分析
May 05 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
Oct 13 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
Oct 27 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
Dec 31 Javascript
原生javascript实现分页效果
Apr 21 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
vue中component组件的props使用详解
Sep 04 Javascript
echarts设置图例颜色和地图底色的方法实例
Aug 01 Javascript
javascript实现商品图片放大镜
Nov 28 Javascript
JS数据类型判断的几种常用方法
Jul 07 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
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 和 XML: 使用expat函数(二)
2006/10/09 PHP
php 读取文件乱码问题
2010/02/20 PHP
3种php生成唯一id的方法
2015/11/23 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
纯JS实现简单的日历
2017/06/26 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
证婚人搞笑证婚词
2014/01/10 职场文书
买卖协议书范本
2014/04/21 职场文书
爱国演讲稿500字
2014/05/04 职场文书
工程部岗位职责
2015/02/10 职场文书
2016春季幼儿园小班开学寄语
2015/12/03 职场文书
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS