(一)数据双向绑定
数据的双向绑定是Vue.js的核心功能在上一篇记录中已经简单创建了一个Vue实例如下
var myVue=new Vue({
el:'#myvue'//myvue是已经存在的div,其id值为myvue
})
使用选项el挂载成功后,我们可以通过myVue.$el来访问该元素,如果需要在此div内绑定数据,就要用到Vue实例的另外一个选项data,data选项可以声明应用内需要双向绑定的数据,建议所有会用到的数据都预先再data内声明这样不至于将数据散落在业务逻辑中,难以维护。
Vue实例本身也代理了data对象里所有的属性可以这样进行访问:
var myVue=new Vue({
el:'#myvue',
data:{
num:3
}
})
console.log(myVue.num);//3
除了显式声明数据外,也可以纸箱一个已有的变量,并且他们之间默认建立了双向绑定,当修改其中任意一个是,另一个也会一起变化比如:
var myData={
num:2
}
var myVue=new Vue({
el:'#myvue',
data:myData
})
console.log(myVue.num)//2
myVue.num=1//修改属性原数据也会变
console.log(myData.num)//1
myData.num=3//修改原数据属性也会变
console.log(myVue.num)//3
(二)文本插值
(1)
使用双大括号{{}}是最基本的文本插值的方法,他会自动将我们双向绑定的数据实时显示出来,微信小程序也是通过此方法进行的数据绑定显示在前端页面上,下面为一个简单的文本插值
<div id='myvue'>
当前时间为{{ date }}
</div>
<script src='XXX'></script> //引用下载好的Vue.js此路径为文件的相对路径,此后所有引用相同
<script>
var myVue=new Vue({
el:'#myvue',
data:{
date:new Date()
}
})
</script>
这样就可以在页面实现显示‘当前时间为+页面加载出来的时间’
(2)
此时我们让他每秒更新一下,思路就是用setInterval()定时器每隔1000毫秒进行一次new Date(),然后把new Date()的值赋给data属性里的date.就可以实时更新变换,但是这时候我们就要思考Vue.js的生命周期了,因为每个vue实例创建时都会经过一系列的初始化过程,同时也会调用相应的生命周期钩子,我们可以利用这些钩子,在合适的时候执行我们的业务逻辑。就像jQuery中的ready()方法一样Vue的生命周期钩子与之类似,比较常用得有:
creatd(创建):实例创建完成后调用,此阶段完成了数据的观测等,但尚未挂载,$el还不能用,需要初始化处理一些数据时会比较有用;
mounted(挂载):el挂载到实例上后调用,一般我们的第一个业务逻辑会从这里开始;
beforeDestroy(销毁之前):实例销毁之前调用,主要解绑一些使用addEventerListener 监听的事件等
这些钩子与el data类似是被作为选项写入Vue实例内的,并且这些钩子也就是方法内的this指的是调用这些方法的实例本身比如
<div id='myvue'></div>
<script src='XXX'></script>
<script>
var myVue=new Vue({
el:'#myvue',
data:{
num:1
},
created:function(){
console.log(this.num)//1
console.log(this.$el)//undefined(由于此时还未挂载)
},
mounted:function(){
console.log(this.num)//1
console.log(this.$el)//<div id='myvue'></div>
}
})
</script>
最后了解到生命周期后我们就可以编辑我们的业务逻辑了,我们要把我们的处理的业务逻辑写在mounted里如下
修改为
<div id='myvue'>
当前时间为{{ date }} //注意要有空格呀
</div>
<script src='XXX'></script>
<script>
var myVue=new Vue(){
el:'#myvue',
data:{
date:new Date()
},
mounted:function(){
var _this=this; //声明一个变量指向本实例
this.timer=setInterval(function(){ //这个this和_this代表的都是本实例
_this.date=new Date(); //因为需要用到的对象是实例所以用_this,如果直接写this的指的是setInterval方法
},1000)
},
beforeDestroy:function(){
if(this.timer){
clearInterval(this.timer); //在实例销毁前清除定时器
}
}
}
</script>
这样我们完成了一个在页面上实时变化的时间