一、三者之间的对比:

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. Memcache未授权访问漏洞简单修复方法

    漏洞描述: memcache是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以开放在外网的memcache服务很容易被攻击者扫描发现,通过命令交互可直接读取memcache中的敏 ...

  2. yoast breadcrumb面包屑导航修改去掉product

    前面我们创建了wordpress添加post_type自定义文章类型和调用自定义post_type文章,现在yoast 面包屑导航出现home >product >分类1,想要把produ ...

  3. Http状态码梳理汇总

    常见的状态代码为:200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务器暂时不可用 1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码.代码 说明 100 ...

  4. 第10组 Beta冲刺(2/4)

    队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 编写商品主界面 展示GitHub当日代码/文档签入记录 暂无代码 接下来的计划 编写购买功能 还剩下哪些 ...

  5. Mac-搭建Hadoop集群

    You have to work very hard to believe that you are really powerless. Mac-搭建Hadoop集群 我用到了:VMware Fusi ...

  6. 使用Redis搭建电商秒杀系统

    背景 秒杀活动是绝大部分电商选择的低价促销.推广品牌的方式.不仅可以给平台带来用户量,还可以提高平台知名度.一个好的秒杀系统,可以提高平台系统的稳定性和公平性,获得更好的用户体验,提升平台的口碑,从而 ...

  7. NamedParameterJdbcTemple与RowMapper实现

    NamedParameterJdbcTemplate和JdbcTemplate功能基本差不多. 1.配置 db.properties 1 jdbc.user=root 2 jdbc.password= ...

  8. Linux上使用yum安装openjdk

    来源:https://www.cnblogs.com/yaun1498078591/p/10368884.html 使用yum查找jdk: yum search java|grep jdk # yum ...

  9. 【K8S】Kubernetes: --image-pull-policy always does not work

    https://stackoverflow.com/questions/45905999/kubernetes-image-pull-policy-always-does-not-work

  10. 读《PMI 分析手册》

    目录 读<PMI 分析手册> 官方 PMI 基本概况 官方制造业 PMI 官方非制造业 PMI 综合 PMI 产出指数 PMI 分析框架 PMI 与经济周期 官方 PMI 分析 参考研报 ...