常用的实例方法:

数据:

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基础进阶 之 实例方法的更多相关文章

  1. Vue基础进阶 之 实例方法--生命周期

    在上一篇博客中我们知道生命周期的方法: 生命周期: vm.$mount:手动挂载Vue实例: vm.$destroy:销毁Vue实例,清理数据绑定,移除事件监听: vm.$nextTick:将方法中的 ...

  2. vue 基础-->进阶 教程(1): 基础(数据绑定)

    第一章 建议学习时间4小时  课程共3章 前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零 ...

  3. vue 基础-->进阶 教程(2): 指令、组件

    第二章 建议学习时间4小时  课程共3章 前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零 ...

  4. vue 基础-->进阶 教程(3):组件嵌套、组件之间的通信、路由机制

    前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零开始,教给大家vue的基础.高级操作.组件 ...

  5. vue 基础-->进阶 教程(2): 指令、自定义指令、组件

    第二章 建议学习时间4小时  课程共3章 前面的nodejs教程并没有停止更新,因为node项目需要用vue来实现界面部分,所以先插入一个vue教程,以免不会的同学不能很好的完成项目. 本教程,将从零 ...

  6. Vue基础进阶 之 列表过渡

    在前面的博客我们一直在操作单个元素的过渡,如果是对多个元素过渡,例如列表,这时就要用到<transition-group>这个组件了: 如何使用:将要操作的列表元素放在<transi ...

  7. Vue基础进阶 之 过渡效果

    进入/离开过渡效果:Vue在插入.更新或移除DOM时,可以设置一些动画效果: 如何使用过渡效果:利用<transition></transition>组件将需要应用的过渡效果的 ...

  8. Vue基础进阶 之 自定义指令

    自定义指令-----钩子函数 自定义指令 除了内置指令,Vue也允许用户自定义指令: 注册指令:通过全局API Vue.directive可以注册自定义指令: 自定义指令的钩子函数: bind: in ...

  9. Vue基础进阶 之 常用的实例属性

    Vue实例属性: vue实例直接调用的属性: 常用的实例属性: vm.$data:获取属性: vm.$el:获取实例挂载的元素: vm.$options:获取自定义选项/属性: vm.$refs:获取 ...

随机推荐

  1. 从unity丢图标到unity进不去桌面

    现象1: 用了一年多的unity的右上角的网络图标和网易云音乐的图标消失不见了,我也不记得最近有update或upgrade过,然而这两个功能还是可以正常用 解决1: 安装Gnome,果然相应的图标就 ...

  2. 转载:margin外边距合并问题以及解决方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. C# 不安装Oracle客户端情况下,如何连接到Oracle数据库

    简介: 在我们开发应用场景经常碰到需要连接Oracle数据库,这也是相当常见的一种情况.一般.Net环境连接Oracle数据库,可以通过TNS/SQL.NET 配置文件,而 TNS 必须要 Oracl ...

  4. 解决JS(Vue)input[type='file'] change事件无法上传相同文件的问题

    Html <input id="file" type="file" accept=".map" onchange="uplo ...

  5. passwd命令

    passwd命令用于设置用户的认证信息,包括用户密码.密码过期时间等.系统管理者则能用它管理系统用户的密码.只有管理者可以指定用户名称,一般用户只能变更自己的密码. 语法 passwd(选项)(参数) ...

  6. HttpSession的认识

    package javax.servlet.http; import java.util.Enumeration; import javax.servlet.ServletContext; publi ...

  7. K XOR Clique

    BaoBao has a sequence a​1​,a​2,...,a​n. He would like to find a subset S of {1,2,...,n} such that ∀i ...

  8. QT下的贪吃蛇

    QT写的贪吃蛇,学习于https://www.devbean.net/2012/12/qt-study-road-2-snake-1/ 建议就学习一下开发思想,开发游戏还是用专门的编译器. 多加了墙, ...

  9. mysql批量更新的两种方式效率试验<二>

    Mysql两种批量更新的对比 简介: mysql搭载mybits框架批量更新有两种方式,一种是在xml中循环整个update语句,中间以‘:’隔开,还有一种是使用case when 变相实现批量更新, ...

  10. map里面的set方法

    let a=[1,2,3,4,1,2,3,4,1,4];let b= new Set(a);console.log(b) 还有add方法介绍下: let a=new Set();let b=[1,1, ...