Vue基础进阶 之 实例方法
常用的实例方法:
数据:
vm.$set:设置属性值;
vm.$delete:删除属性值;
vm.$watch:观测数据变化;
生命周期:
vm.$mount:手动挂载Vue实例;
vm.$destroy:销毁Vue实例,清理数据绑定,移除事件监听;
vm.$nextTick:将方法中的回调函数,延迟到DOM更新后;
vm.$set:设置属性值与vm.$delete:删除属性值;
示例:
想和上图一样可以添加一个id,如果有id就就行自增,如果没有就添加一个默认值,因此只能使用.$set的实例方法:
vue代码:
<script> let vm= new Vue({
el:'div',
data:{
user:{
username:'perfect'
} },
methods:{ changeUsername(){ this.user.username='perfect_1';
}, addId(){
// this.$set(this.user,'id',1);//局部进行添加Id
// Vue.set(this.user,'id',1);//全局设置 if(this.user.id){
this.user.id++;
}else{
Vue.set(this.user,'id',);
}
console.log(this.user.id);
}
} }); </script>
其中,this.user表示对象,id表示key,1表示value
html:
<body>
<div>
Id:<span>{{user.id}}</span><br /> 用户名:<span>{{user.username}}</span><br />
<button @click="changeUsername">changeUsername</button>
<button @click="addId">添加ID</button> </div>
</body>
同理,我们使用.$delete实例方法:如果有id的时候我们进行删除
使用.$delete实例方法的vue代码:
delId(){
if(this.user.id){
// this.$delete(this.user,'id'); Vue.delete(this.user,'id');//全局的
console.log('已经删除ID');
}
HTML:
<div>
Id:<span>{{user.id}}</span><br /> 用户名:<span>{{user.username}}</span><br />
<button @click="changeUsername">changeUsername</button>
<button @click="addId">添加ID</button>
<button @click="delId">删除ID</button> </div>
.$set与.$delete实例方法总的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 06_常用的实例方法</title>
<script type="text/javascript" src="../js/vue.js" ></script> </head>
<body>
<div>
Id:<span>{{user.id}}</span><br /> 用户名:<span>{{user.username}}</span><br />
<button @click="changeUsername">changeUsername</button>
<button @click="addId">添加ID</button>
<button @click="delId">删除ID</button> </div>
</body> <script> let vm= new Vue({
el:'div',
data:{
user:{
username:'perfect'
} },
methods:{ changeUsername(){ this.user.username='perfect_1';
}, addId(){
// this.$set(this.user,'id',1);//局部进行添加Id
// Vue.set(this.user,'id',1);//全局设置 if(this.user.id){
this.user.id++;
}else{
Vue.set(this.user,'id',);
}
console.log(this.user.id);
},
delId(){
if(this.user.id){
// this.$delete(this.user,'id'); Vue.delete(this.user,'id');//全局的
console.log('已经删除ID');
} } } }); </script>
</html>
.$set与.$delete实例方法
vm.$watch:观测数据变化
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 07_常用的实例方法_watch</title>
<script type="text/javascript" src="../js/vue.js" ></script> </head>
<body>
<div>
<input type="text" v-model="msg" /><br />
msg:<span> {{msg}}</span><br />
<input type="text" v-model="num" /><br />
num:<span> {{msg}}</span><br />
<button onclick="unWatch()">unWatch</button> </div>
</body> <script> let vm= new Vue({
el:'div',
data:{
msg:'perfect',
num: },
watch:{
num:function(newValue,oldValue){
console.log("修改了num old="+oldValue+"new="+newValue);
}
}, });
let unwatch=vm.$watch('msg',function(newValue,oldValue){//返回一个取消观察函数,用来停止触发回调: console.log("修改了msg old="+oldValue+"new="+newValue);
});
function unWatch(){ unwatch();
} </script>
</html>
观测一个普通的属性,可以进行回调
实例方法watch深度观测
当观测一个对象时:需要一个深度观测deep这样才能进行回调
发现打印出来新值与旧值得结果都一样,说明没有获取到修改的username
加入的vue代码:
user:{
handler:function(newValue,oldValue){
console.log("修改了username old="+oldValue.username+"new="+newValue.username);
console.log(oldValue==newValue);
},
deep:true
}
加入的HTML:
<input type="text" v-model="user.username" /><br />
username:<span> {{user.username}}</span><br />
当然.$watch也有这样的写法;
其代码为:
let unwatch=vm.$watch('user',{//返回一个取消观察函数,用来停止触发回调: handler:function(newValue,oldValue){
console.log("修改了msg old="+oldValue+"new="+newValue);
},
deep:true
});
vm.$watch总的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 07_常用的实例方法_watch</title>
<script type="text/javascript" src="../js/vue.js" ></script> </head>
<body>
<div>
<input type="text" v-model="msg" /><br />
msg:<span> {{msg}}</span><br />
<input type="text" v-model="num" /><br />
num:<span> {{msg}}</span><br />
<input type="text" v-model="user.username" /><br />
username:<span> {{user.username}}</span><br />
<button onclick="unWatch()">unWatch</button> </div>
</body> <script> let vm= new Vue({
el:'div',
data:{
msg:'perfect',
num:,
user:{
id:'',
username:'perfect*'
} },
watch:{
num:function(newValue,oldValue){
console.log("修改了num old="+oldValue+"new="+newValue);
}, // user:{
// handler:function(newValue,oldValue){
// console.log("修改了username old="+oldValue.username+"new="+newValue.username);
// console.log(oldValue==newValue);
// },
// deep:true
// }
} }); let unwatch=vm.$watch('user',{//返回一个取消观察函数,用来停止触发回调: handler:function(newValue,oldValue){
console.log("修改了msg old="+oldValue+"new="+newValue);
},
deep:true
});
function unWatch(){ unwatch();
} </script>
</html>
观测数据变化的实例方法
Vue基础进阶 之 实例方法的更多相关文章
- Vue基础进阶 之 实例方法--生命周期
在上一篇博客中我们知道生命周期的方法: 生命周期: vm.$mount:手动挂载Vue实例: vm.$destroy:销毁Vue实例,清理数据绑定,移除事件监听: vm.$nextTick:将方法中的 ...
- vue 基础-->进阶 教程(1): 基础(数据绑定)
第一章 建议学习时间4小时 课程共3章 前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零 ...
- vue 基础-->进阶 教程(2): 指令、组件
第二章 建议学习时间4小时 课程共3章 前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零 ...
- vue 基础-->进阶 教程(3):组件嵌套、组件之间的通信、路由机制
前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零开始,教给大家vue的基础.高级操作.组件 ...
- vue 基础-->进阶 教程(2): 指令、自定义指令、组件
第二章 建议学习时间4小时 课程共3章 前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零 ...
- Vue基础进阶 之 列表过渡
在前面的博客我们一直在操作单个元素的过渡,如果是对多个元素过渡,例如列表,这时就要用到<transition-group>这个组件了: 如何使用:将要操作的列表元素放在<transi ...
- Vue基础进阶 之 过渡效果
进入/离开过渡效果:Vue在插入.更新或移除DOM时,可以设置一些动画效果: 如何使用过渡效果:利用<transition></transition>组件将需要应用的过渡效果的 ...
- Vue基础进阶 之 自定义指令
自定义指令-----钩子函数 自定义指令 除了内置指令,Vue也允许用户自定义指令: 注册指令:通过全局API Vue.directive可以注册自定义指令: 自定义指令的钩子函数: bind: in ...
- Vue基础进阶 之 常用的实例属性
Vue实例属性: vue实例直接调用的属性: 常用的实例属性: vm.$data:获取属性: vm.$el:获取实例挂载的元素: vm.$options:获取自定义选项/属性: vm.$refs:获取 ...
随机推荐
- Linux网络设备驱动 _驱动模型
Linux素来以其强大的网络功能著名,同时, 网络设备也作为三大设备之一, 成为Linux驱动学习中必不可少的设备类型, 此外, 由于历史原因, Linux并没有强制对网络设备贯彻其"一切皆 ...
- python将字符串类型改成日期类型
将字符串类型的'2019-03-14'改成date类型,如下: import datetime b = datetime.date(*map(int,'2019-03-14'.split('-'))) ...
- 寻求js
寻找登录的post地址 在form表单中寻找action对应的url地址 post的数据是input标签中的name值作为键,真正的用户名密码作为值得字典,post的url地址就是action对应的u ...
- 【python】——sql模拟
一.作业需求: 当然此表你在文件存储时可以这样表示 1,Alex Li,22,13651054608,IT,2013-04-01 现需要对这个员工信息文件,实现增删改查操作 可进行模糊查询,语法至少支 ...
- python语法_终止循环_break_continue
break 终止整个循环计算 continue 终止本次循环,continue前的代码执行,continue后的代码不执行,下次循环继续.
- ELK之使用filebeat收集系统数据及其他程序并生成可视化图表
当您要面对成百上千.甚至成千上万的服务器.虚拟机和容器生成的日志时,请告别 SSH 吧.Filebeat 将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂. 1,安装fileb ...
- Codeforces 570E - Pig and Palindromes - [滚动优化DP]
题目链接:https://codeforces.com/problemset/problem/570/E 题意: 给出 $n \times m$ 的网格,每一格上有一个小写字母,现在从 $(1,1)$ ...
- awt
public class MouseTest extends Frame{ private static final long serialVersionUID = 54376853365952763 ...
- [Day14]Eclipse高级、类与接口作为参数返回值
l 不同修饰符的使用 类,最常使用public修饰 成员变量,最常使用private修饰 成员方法,最常使用public修饰 l 自定义数据类型的使用 类作为方法参数时,说明要向方 ...
- 【转载】MDK环境下让STM32用上FreeRTOS v8.1.2和FreeRTOS+Trace v2.6.0全过程
[转载]https://www.amobbs.com/thread-5601460-1-2.html?_dsign=6a59067b 本人选择使用FreeRTOS的最大原因就是想使用FreeRTO ...