前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue教程(methods,watch及computed的区别)

Vue教程(methods,watch及computed的区别)

作者头像
用户4919348
发布2019-08-08 10:22:31
6020
发布2019-08-08 10:22:31
举报
文章被收录于专栏:波波烤鸭波波烤鸭

  本文我们通过案例来介绍下 watchcomputed 的使用,案例效果如下:

在这里插入图片描述
在这里插入图片描述

  如上,该案例就是实现一个简单的名称拼接处理。实现的方式也比较多,本文我们会分别采用三种方式来实现。

一、案例实现

基础页面:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./lib/vue-2.4.0.js"></script>
</head>
<body>
    <div id="app">
        <input type="text" > + 
        <input type="text" > =
        <input type="text" > 

    </div>

    <script>
        var vm = new Vue({
            el: "#app",
            data: {},
            methods: {}
        })
    </script>
</body>
</html>

1.普通DOM操作实现

  看到上面的效果,相信大家通过普通的dom对象操作都能够实现这个效果,我们也来实现下,如下:

   首先我们给三个 input 输入框和 vm实例 做双向绑定

在这里插入图片描述
在这里插入图片描述

   然后我们给 firstnamelastname 的输入框分别绑定 keyup 事件,然后在 vm 实例的 methods 中定义拼接名称的方法

在这里插入图片描述
在这里插入图片描述

搞定! 效果如下:

在这里插入图片描述
在这里插入图片描述

2.watch使用

  接下来我们再来看下通过watch来实现上面的效果.

在这里插入图片描述
在这里插入图片描述

watch 会监视 data 中指定的数据,当这些数据发生变动的时候会触发对应的 function来处理相关的业务。   此处可能大家会比较疑惑,watch 需要监视 firstnamelastname 这两个信息,而 我们通过 keyup 只需要在 methods 中定义一个方法就可以了,感觉watch 反而没有前面例子中来的方便,那么 watch 的作用还有什么呢?前面的事件监听只能处理DOM元素而针对 路由的变化就无能为力了,所以我们来看下下面这个案例

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./lib/vue-2.4.0.js"></script>
    <script src="./lib/vue-router-3.0.1.js"></script>
</head>
<body>
    <div id="app">

        <router-link to="/login">登录</router-link>
        <router-link to="/register">注册</router-link>

        <router-view></router-view>
    </div>

    <script>
        // 创建两个组件
        var login = {
            template: "<h1>这是个登录组件</h1>"
        }
        var register = {
            template: "<h1>这是个注册组件</h1>"
        }
        var routerObj = new VueRouter({
            routes:[
                { path : "/login" , component : login },
                { path : "/register" , component : register }
            ]
        })
        var vm = new Vue({
            el: "#app",
            data: {},
            methods: {},
            router: routerObj
        })
    </script>
</body>
</html>

效果

在这里插入图片描述
在这里插入图片描述

  现在我们希望能够在路由变化的时候来捕获到这个行为,并给出对应的响应。这时我们可以监视 vm.$route.path 来处理

在这里插入图片描述
在这里插入图片描述

  所以可以如下方式实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

watch 监视路由变化的效果搞定~

3.computed使用

   最后我们来看下 computed 怎么来实现上面案例的效果的。

在这里插入图片描述
在这里插入图片描述

  在 computed 中,可以定义一些 属性,这些属性,叫做 计算属性, 计算属性的本质,就是 一个方法,只不过,我们在使用 这些计算属性的时候,是把 它们的 名称,直接当作 属性来使用的;并不会把计算属性,当作方法去调用;

  • 计算属性,在引用的时候,一定不要加 () 去调用,直接把它 当作 普通 属性去使用就好了;
  • 只要 计算属性,这个 function 内部,所用到的 任何 data 中的数据发送了变化,就会 立即重新计算 这个 计算属性的值
  • 计算属性的求值结果,会被缓存起来,方便下次直接使用; 如果 计算属性方法中,所以来的任何数据,都没有发生过变化,则不会重新对 计算属性求值;

完整代码

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./lib/vue-2.4.0.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>
        var vm = new Vue({
            el: "#app",
            data: {
                firstname : "",
                lastname : ""
            },
            methods: {} ,
            computed: {
                'fullname' : function(){
                    return this.firstname + '-' + this.lastname
                }
            }
        })
    </script>
</body>
</html>

二、methods、watch、computed的区别

  最后来看下这三者的区别,具体如下:

元素

描述

computed

属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用

methods

方法表示一个具体的操作,主要书写业务逻辑

watch

一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作;可以看作是computed和methods的结合体

好了本文就介绍到此~有问题的小伙伴欢迎留言交流哦

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年08月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、案例实现
    • 1.普通DOM操作实现
      • 2.watch使用
        • 3.computed使用
        • 二、methods、watch、computed的区别
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档