Vue学习笔记(二)
时间:2023-04-02 22:34:41
HTML
1.Vue生命周期一个Vue实例从创建到销毁的过程称为生命周期,一共有八个阶段。这八个阶段中的每一个都有一个称为挂钩函数的实例选项。供用户在相应的阶段进行操作。beforeCreate(){//刚刚创建了组件实例,还没有进行数据观察和事件配置},created(){//已经创建了实例,还进行了数据观察和事件配置},beforeMount(){//模板编译前,还没有挂载},mounted(){//模板编译完成后,已经挂载,此时会渲染页面,让数据上页面可以显示},beforeUpdate(){//组件更新前},updated(){//组件更新后},beforeDestroy(){//组件销毁前},destroyed(){//afterthecomponentisdestroyed}在这些钩子中,最常用的是created()和mounted()。2.计算属性计算属性也用于存储数据,但具有以下特点:可以对数据进行逻辑处理,以监控计算属性中的数据1.基本用法{{addZero}}
newVue({el:'#app',data:{num:8},computed:{//这个是computed属性的get方法,用来取值addZero(){returnthis.num>10?this.num:'0'+this.num;}}})在这里,addZero与num相同,是一个属性。但是,addZero取决于num和计算值。一旦num的值发生变化,addZero的值也会随之变化。
{{num}}----{{addZero}}
点击更改num newVue({el:'#app',data:{num:8},methods:{change:()=>{this.num++;}},computed:{addZero:()=>{returnthis.num>10?this.num:'0'+this.num;}}})一旦我们点击按钮改变num的值,addZero也会改变,因为计算属性实时监控依赖关系。2.Computedpropertyvsmethod将计算属性的get函数定义为方法,也可以实现与计算属性类似的功能。那么两者有什么区别呢?区别一:计算属性是根据依赖关系实时更新的,方法是调用时才更新。差异2:计算属性被缓存。只要相关依赖没有变化,多次访问计算属性得到的值就是之前缓存的计算。因此,它不会被执行多次。操作没有依赖关系的值也是如此。官方文档给出了如下例子:computed:{now:function(){returnDate.now()}}computed属性有缓存,这里的now值不会改变。3.get和set计算属性由get和set两部分组成,分别用于获取计算属性和设置计算属性。默认情况下,只有get。如果需要设置,需要自己添加。
{{num}}----{{addZero}}
点击更改num newVue({el:'#app',data:{num:8},methods:{change(newNumber){this.addZero=newNumber;}},computed:{addZero:{get(){returnthis.num>10?this.num:'0'+this.num;},set(newNum){this.num=newNum}}}})将在我们更改addZero属性的值时自动调用改变方法它的设置方法。3.实例属性和方法Vue为实例和属性提供了几种属性和方法。1.Attributes获取属性的语法:实例名。属性名下面是常用的属性:vm.$el:获取与vue实例关联的元素DOM,然后可以对其进行操作vm.$data:获取数据对象datavm.$options:获取选项,自定义选项也可以在这里获得。vm.$refs:获取所有添加了ref属性的elementdom对象,然后可以对其进行操作2.方法vm.$mount()手动挂载vue实例varvm=newVue({data:{msg:'Hellovue.js'}}).$mount('#app');vm.$destroy()销毁实例vm.$destroy();//销毁实例占用的内存空间vm.$nextTick(callback)在DOM更新完成后执行回调函数,一般在修改数据后使用该方法获取更新的DOMvarvm=newVue({data:{msg:'Hellovue.js'}}).$mount('#app');//修改数据vm.msg='foo';console.log(vm.$refs.title.textContent);//你好vue.jsvm.$nextTick(function(){console.log(vm.$refs.title.textContent);//foo});DOM尚未更新。Vue实现的响应式,并不是说数据改变后DOM马上改变。它需要按照一定的策略更新DOM,这需要时间!使用$nextTick方法等待DOM更新后再获取数据。vm.$set(target,key,value)通过vue实例的$set方法给对象添加属性,可以实时监控。
{{user.name}}
{{user.age}}
添加属性 varvm=newVue({data:{msg:'Hellovue.js',user:{name:'hedawei',gender:'man'}},methods:{addAge(){/*this.user.age=22;*/this.$set(this.user,'age',22);}}}).$mount('#app');如果使用原来在方法中添加属性的方法,是不会在模板中显示的。使用$set方法会实时监控数据,然后添加。vm.$watch(monitoringproperty,callback)监听vue实例的变化vm.$watch('msg',(newValue,oldValue)=>{console.log('msg已修改,原值:'+旧值+',新值:'+newValue);});如果需要监控深度数据变化(比如监控对象中的某个属性),需要在选项中加上{deep:true}。4.自定义指令自定义指令分为自定义全局指令和自定义局部指令。1.自定义全局指令,使用全局方法Vue.directive(directiveID,definitionobject)。注意:使用命令时,必须在指定名称前加上前缀v-,即v-命令的名称。简单例子:Vue.directive('hello',{bind(){//常用!!alert('指令第一次绑定元素时调用,只调用一次,初始化操作即可执行');},inserted(){alert('绑定元素插入DOM时调用');},update(){alert('绑定元素所在模板更新时调用');},componentUpdated(){alert('当绑定元素所在的模板完成一个更新周期时调用');},unbind(){alert('当指令与元素解除绑定时调用,只调用一次');}});这里定义了一个名为hello的指令,指令定义函数提供了几个钩子函数,分别在不同的时间生效。我们这样使用这个指令: