第3章:vue生命周期及实例的属性


 

  Vue的生命周期

  vue的生命周期图示

   生命周期示例day02/03.html




	
	Vue生命周期
	
	


	
{{msg}}

  计算属性

  1.基本用法

  计算属性也是用来存储数据的,但具有以下几个特点  

  a.数据可以进行逻辑处理操作

  b.对计算属性中的数据进行监视

  计算属性取值不能向定义普通属性那样定义,需要定义函数,函数必须有返回值称为get值,调用的时候和普通属性是一样的{{}}

  示例day02/04.html 




	
	计算属性
	
	


	

{{msg}}

{{msg2}}

  假如想要把msg以空格为分隔符然后反向输出,下面有两种方法

  1,在数据展示时进行逻辑处理

  2,使用计算属性定义函数在函数内处理

  示例




	
	计算属性
	
	


	

{{msg}}

{{msg2}}

{{msg.split(' ').reverse().join(' ')}}

{{reverseMsg}}

  页面显示,两种处理方法效果是一样的  

   2.计算属性 vs 方法

  将计算属性的get函数定义为一个方法也可以实现类似的功能

  区别:

    a.计算属性是基于它的依赖进行更新的,只有在相关依赖发送改变时才能更新变化

    b.计算属性是缓存的,只要相关依赖没有改变,多次访问计算属性得到的值是之前缓存的计算结果,不会多次执行

  示例day02/04html 计算属性




	
	计算属性
	
	


	

{{msg}}

{{msg2}}

{{msg.split(' ').reverse().join(' ')}}

{{reverseMsg}}

  解析:函数fn是单独定义的不属于vue实例,点击测试时候调用,间隔1秒执行打印 vm.num2是打印计算属性

  页面输出

   修改代码

  调用方法输出而不是计算属性

console.log(vm.getNum2());
// console.log(vm.num2);

  页面输出

   3,.get和set

  计算属性由两部分组成:get和set,分别用来获取计算属性和设置计算属性

  默认只有get,如果需要set,要自己添加

  计算属性赋值不能给自己赋值而需要给该计算属性依赖的值赋值,示例




	
	计算属性
	
	


	

{{msg}}

{{msg2}}

{{msg.split(' ').reverse().join(' ')}}

{{reverseMsg}}

{{num2}}

  解析:点击修改计算属性调用change2方法,在这个方法内给num2赋值给111,当出现赋值操作则调用该计算属性的set方法,传递的参数val就是change2中设置的的值111,但是不能在set方法内直接修改num2 的值,如果直接修改会因为重复调用溢出栈报错,需要修改的是是num1的值,因为num2依赖num1所以num2的值也修改了

  页面显示

 

   四,vue实例的属性和方法

  1.属性

vm.$el
vm.$data
vm.$options
vm.$refs

  示例05.html




	
	vue实例的属性和方法
	
	


	
{{msg}}

你好

世界


  页面显示

  2.方法

vm.$mount()
vm.$destroy()
vm.$nextTick()

vm.$set()
vm.$delete()
vm.$watch()

  mount手动挂载实例




	
	vue实例的属性和方法
	
	


	
{{msg}}

你好

世界


  手动挂载的效果和以下代码效果是一样的

vm=new Vue({
			el:'#itany',
			data:{  
				msg:'welcome to itany',
			},
            name:'liuym',
            age:24,
            show:function(){
                console.log('show')
            },
        });

  vm.$nextTick(callback)示例

  vm.$nextTick(callback)在DOM更新完成后再执行回调函数,一般在修改数据之后使用该方法,以便能获取更新后的DOM

  不使用nextTick在修改以后




	
	vue实例的属性和方法
	
	


	
{{msg}}

你好

世界


标题:{{name}}

  页面显示

   修改代码使用nextTick绑定在函数内执行

// console.log(vm.$refs.title.textContent);
        vm.$nextTick(function(){
            // DOM更新完成再执行此代码
            console.log(vm.$refs.title.textContent);
        });

  页面显示

   方法

vm.$set(object,key,value)
vm.$delete(object,key)
vm.$watch(data,callback[,options])

  set方法示例 day02/06.html




	
	添加和删除属性
	


	

{{user.name}}

{{user.age}}

  user本身没有age属性,使用doAdd方法添加这个属性,页面显示

 

   如果需要监控实时显示,修改代码使用set方法,修改方法doAdd()代码

 this.$set(this.user,'age',18);

  页面显示

   以下代码是添加属性的全局方式,和上面代码实现的效果是一样的

Vue.set(this.user,'age',19)

  一般情况下set方法不直接使用而是做一个判断再使用,例如需要从user中获取这个属性,如果有这个属性则给这个属性值+1,赋值设置这个属性值为1

 if(this.user.age){
    this.user.age++;
}else{
    Vue.set(this.user,'age',1);
 }

  delete方法演示

  06.html




	
	添加和删除属性
	


	

{{user.name}}

{{user.age}}

  页面显示

   watch方法示例

  有两种方法监视数据day02/07.html




	
	监视数据的变化
	


	

{{name}}


{{age}}

  监视数据传递两个参数一个是修改后的新值一个是旧值

  页面显示

   选项:deep 深度监视

  为了发现对象内部值的变化,可以在选项参数中指定 deep: true。注意监听数组的变更不需要这么做。

  示例,监听一个数组的变更




	
	监视数据的变化
	


	

{{name}}


{{age}}


{{user.name}}

  解析:想要监控数组user的变更,但是页面显示,因为只是修改了数组user下面属性name的值,但是数组user对name属性的指向并没有变化,需要深度监视需要加deep选项

   修改代码如下

  // 深度监视
user:{
	handler:(newValue,oldValue) => {
	console.log('user被修改啦,原值:'+oldValue.name+',新值:'+newValue.name);
	},
	deep:true //深度监视,当对象中的属性发生变化时也会监视
	}

  页面显示

   newValue和oldValue指向的是同一个地址空间,值是修改之后的值,所以是一样的。

相关