一、三者之间的对比:

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

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

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

二、methods:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>methods实现名称拼接</title>
<script src="./lib/vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="firstname" @keyup="getFullname" /> +
<input type="text" v-model="lastname" @keyup="getFullname" /> =
<input type="text" v-model="fullname" />
</div>
<script>
var vm = new Vue({
el: "#app",
data: {
firstname: "",
lastname: "",
fullname: ""
},
methods: {
getFullname() {
this.fullname = this.firstname + "-" + this.lastname;
}
}
});
</script>
</body>
</html>

2、watch:

使用这个属性,可以监视 data中指定数据的变化,然后触发这个watch中对应的function处理函数。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>methods实现名称拼接</title>
<script src="./lib/vue.js"></script>
</head>
<body>
<div id="app">
<!-- <input type="text" v-model="firstname" @keyup="getFullname" /> +
<input type="text" v-model="lastname" @keyup="getFullname" /> = -->
<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: "",
fullname: ""
},
methods: {
// getFullname() {
// this.fullname = this.firstname + "-" + this.lastname;
// }
},
watch: {
firstname: function(newVal, oldval) {
this.fullname = newVal + "-" + this.lastname;
},
lastname: function(newVal) {
this.fullname = this.firstname + "-" + newVal;
}
}
});
</script>
</body>
</html>

3、watch监听路由地址的变化:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>methods实现名称拼接</title>
<script src="./lib/vue.js"></script>
<!-- 1.导包 -->
<script src="./lib/vue-router.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>
//2.创建子组件
var login = {
template: "<h3>这是登录子组件</h3>"
}; var register = {
template: "<h3>这是注册子组件</h3>"
};
//3.创建一个路由对象
var router = new VueRouter({
routes: [
//路由规则数组
{ path: "/", redirect: "/login" },
{ path: "/login", component: login },
{ path: "/register", component: register }
],
linkActiveClass: "myactive" //和激活有关的类
});
var vm = new Vue({
el: "#app",
data: { },
methods: {}, router, watch: { "$route.path": function(newVal, oldVal) {
if (newVal === "/login") {
console.log("欢迎进入登录页面");
} else if (newVal === "/register") {
console.log("欢迎进入注册页面");
}
}
}
});
</script>
</body>
</html>

4、computed:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>methods实现名称拼接</title>
<script src="./lib/vue.js"></script>
<script src="./lib/vue-router.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="firstname" /> +
<input type="text" v-model="middlename" /> +
<input type="text" v-model="lastname" /> =
<input type="text" v-model="fullname" />
</div>
<script>
var vm = new Vue({
el: "#app",
data: {
firstname: "",
middlename: "",
lastname: ""
},
methods: {},
watch: {},
computed: {
fullname: function() {
console.log("ok");
return this.firstname + "-" + this.middlename + "-" + this.lastname;
}
}
});
</script>
</body>
</html>

在computed 中,可以定义一些属性,这些属性 ,叫做 【计算属性】,计算属性的本质就是一个方法。

只不过,我们在使用这些计算属性的时候,是把它们的名称,直接当作属性来使用的;并不会把计算属性当作方法去调用。

需要注意的是:

①、计算属性在引用的时候,一定不要加()去调用,直接把它当作 普通属性去使用就好了;

②、只要计算属性,这个 function 内部,所用到的任何 data 中的数据发送了变化,就会立即重新计算这个计算属性的值;

③、计算属性的求值结果,会被缓存起来,方便下次直接使用;如果计算属性方法中,所以来的任何数据,都没有发生过变化,则 不会重新对 计算属性求值。

Vue学习之监听methods、watch及computed比较小结(十一)的更多相关文章

  1. vue mounted中监听div的变化

    vue mounted中监听div的变化 <div style="width:200px;height:30px;background: #0e90d2" id=" ...

  2. Vue之数据监听存在的问题

    Vue之数据监听 当数据监听的是列表时,数据发生改变,不会被监听到. // 用$set修改数组中的数组能够被监听 // app.$set(this.hobby, 0, "爱你哦") ...

  3. Vue的watch监听事件

    Vue的watch监听事件 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  4. Vue watch 深层监听

    Vue中监听某个对象的属性 为了避免监听整个对象导致效率问题,可以监听某个对象的特定属性 watch: { 'deptModel.depts': { handler(newVal, oldVal) { ...

  5. Vue之watch监听对象中某个属性的方法

    新建 userinfo = { name: "小明",  age: "18", } vue中watch监听name的方法 1. 可以结合计算属性的方法实现 { ...

  6. vue浏览器返回监听

    具体步骤如下: 1.挂载完成后,判断浏览器是否支持popstate mounted(){ if (window.history && window.history.pushState) ...

  7. vue.js 组件监听

    一.在通过点击事件触发的子组件中: addCart(event) { if (!event._constructed) { return; } if (!this.food.count) { Vue. ...

  8. Vue.js:监听属性

    ylbtech-Vue.js:监听属性 1.返回顶部 1. Vue.js 监听属性 本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化: 实例 & ...

  9. vue的属性监听

    一.vue的监听 1.监听的例子 如: html:<input type="number" v-model="a" /> js: watch: { ...

随机推荐

  1. 重新学习Spring注解——servlet3.0

    53.servlet3.0-简介&测试 54.servlet3.0-ServletContainerInitializer 55.servlet3.0-ServletContext注册三大组件 ...

  2. mobx 学习笔记

    Mobx 笔记 Mobx 三板斧,observable.observer.action. observable: 通过 observable(state) 定义组件的状态,包装后的状态是一个可观察数据 ...

  3. ValueError: Dependency on app with no migrations: customuser

    You haven't run manage.py makemigrations customuser to create the migrations for your CustomUser app ...

  4. serverless 如何调试(三)

    在上篇文章中,我们讲解了如何调用我们的hello-world应用,只需要使用命令: serverless invoke -f hello -l ,但是我们总不可能修改一次代码,就调用一下这个命令吧,或 ...

  5. hadoop java.nio.channels.ClosedChannelException

    今天在跑一个任务的时候,报错java.nio.channels.ClosedChannelException. INFO mapreduce.Job: Task Id : attempt_152101 ...

  6. Super Fish

        Super fish is a common fun and leisure game. It's a game that tests your intelligence and memory ...

  7. LeetCode 896. Monotonic Array

    原题链接在这里:https://leetcode.com/problems/monotonic-array/ 题目: An array is monotonic if it is either mon ...

  8. Vue模板语法(一)

    Vue模板语法 一.插值 1.1.1 文本 {{msg}} 1.1.2 html 使用v-html指令用于输出html代码 1.1.3 属性 HTML属性中的值应使用v-bind指令 1.1.4 表达 ...

  9. springboot事务

    参考: 1.https://www.cnblogs.com/kesimin/p/9546225.html https://www.cnblogs.com/east7/p/10585724.html

  10. 浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法

    浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法 众所周知,把[0,1]区间内的n个随机.相互独立的实数变量\(x_i\)之间的大小关系写成一个排列\(\{p_i\}\),使得\(\f ...