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 相关文章推荐
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
Aug 15 Javascript
javascript避免数字计算精度误差的方法详解
Mar 05 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
Apr 25 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
Mar 13 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
May 12 Javascript
跟我学习javascript的闭包
Nov 16 Javascript
js实现自动轮换选项卡
Jan 13 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
Apr 13 Javascript
Vue.js 中的 v-cloak 指令及使用详解
Nov 19 Javascript
详解CommonJS和ES6模块循环加载处理的区别
Dec 26 Javascript
JavaScript实现好看的跟随彩色气泡效果
Feb 06 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
May 09 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
基于Zend的Captcha机制的应用
2013/05/02 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
php防止伪造的数据从URL提交方法
2014/06/27 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
jQuery示例收集
2010/11/05 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python基于内置函数type创建新类型
2020/10/22 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
机器人总动员观后感
2015/06/09 职场文书
门球健将观后感
2015/06/16 职场文书
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js