Vue学习之监听methods、watch及computed比较小结(十一)
一、三者之间的对比:
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:
<!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比较小结(十一)的更多相关文章
- vue mounted中监听div的变化
vue mounted中监听div的变化 <div style="width:200px;height:30px;background: #0e90d2" id=" ...
- Vue之数据监听存在的问题
Vue之数据监听 当数据监听的是列表时,数据发生改变,不会被监听到. // 用$set修改数组中的数组能够被监听 // app.$set(this.hobby, 0, "爱你哦") ...
- Vue的watch监听事件
Vue的watch监听事件 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- Vue watch 深层监听
Vue中监听某个对象的属性 为了避免监听整个对象导致效率问题,可以监听某个对象的特定属性 watch: { 'deptModel.depts': { handler(newVal, oldVal) { ...
- Vue之watch监听对象中某个属性的方法
新建 userinfo = { name: "小明", age: "18", } vue中watch监听name的方法 1. 可以结合计算属性的方法实现 { ...
- vue浏览器返回监听
具体步骤如下: 1.挂载完成后,判断浏览器是否支持popstate mounted(){ if (window.history && window.history.pushState) ...
- vue.js 组件监听
一.在通过点击事件触发的子组件中: addCart(event) { if (!event._constructed) { return; } if (!this.food.count) { Vue. ...
- Vue.js:监听属性
ylbtech-Vue.js:监听属性 1.返回顶部 1. Vue.js 监听属性 本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化: 实例 & ...
- vue的属性监听
一.vue的监听 1.监听的例子 如: html:<input type="number" v-model="a" /> js: watch: { ...
随机推荐
- apache在linux下安装
yum安装 主流Linux系统版本基本上都集成了apache服务器httpd,我们可以通过如下命令来查看我们的操作系统上是否已经安装了apache服务器httpd rpm -qa | grep htt ...
- cmd 计划任务
Schtasks /create /sc ScheduleType /tn TaskName /tr TaskRun [/s Computer [/u [Domain\]User [/p Passwo ...
- python 通过scapy获取网卡列表
python通过scapy 获取网卡列表如下: #coding:utf-8 from scapy.all import * #显示网卡信息 show_interfaces() 运行结果如下:
- CMD窗口恢复默认设置
CMD全称Command,是Windows系统下自带的类DOS系统,在日常工作中,有时候设置会损害CMD窗口的默认,导致浏览效果不佳,这时候需要有办法恢复到默认设置.在注册表中删除以下文件夹即可:HK ...
- arguments简单函数 求整数递加和
function add(n){if(n == 1) return 1;else return n + arguments.callee(n-1);alert(arguments.callee(1)) ...
- Anaconda3(5-1)程序编辑器 自带的spyder
1装好后自带spyder编辑器 2 打开软件 3 每次程序需要制定anaconda3中创建的虚拟环境对应 的python版本的路径 例如在我的电脑我创建了两个环境 而我的pytorch安装在pytho ...
- 可怕的Full GC (转自Hbase不睡觉书)
PS:之前做项目的时候,需要做个复杂的查询,大量的查询总是导致hbase集群奔溃,最后定位到时full GC的原因. 以下转自<Hbase不睡觉书>-------------------- ...
- hibernate关联关系 (多对多)
hibernate的多对多 hibernate可以直接映射多对多关联关系(看作两个一对多 多对多关系注意事项 一定要定义一个主控方 多对多删除 主控方直接删除 被控方先通过主控方解除多对多关系,再删 ...
- IE和火狐的事件机制有什么区别
1.IE的事件流是冒泡流,火狐支持冒泡流和捕获流. 2.阻止事件冒泡:IE---e.cancelBubble = true; 火狐---e.stopPropagation();
- 【转】SkipList跳表基本原理
增加了向前指针的链表叫作跳表.跳表全称叫做跳跃表,简称跳表.跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表.跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找.跳表不仅 ...