VUE学习第四次


-----------------------------------------------------


过滤器 可以绑定多个 串行


-----------------------------------------------------

生命周期:VUE 实例从创建到销毁的过程,生命周期

钩子函数 事件劫持机制 VUE内置事件

8个阶段

mounted 模板编译后


例子在demo 9 里面

<!DOCTYPE html>
<html lang="zh-cn">
<head>
	<meta charset="UTF-8">
	<title>生命周期</title>
	<link rel="stylesheet" href="lib/bootstrap/dist/css/bootstrap.css">
	<script stpe="text/javascript" src="lib/jquery/dist/jquery.js"></script>
	<script stpe="text/javascript" src="lib/bootstrap/dist/js/bootstrap.js"></script>
	<script stpe="text/javascript" src="vue/dist/vue.js"></script>
	<script>
		window.onload=function(){
			new Vue({
				el:'#demo9',// 2.0不允许挂载到html,body元素上
				data:{
					msg:'welcome'
				},
				methods:{
					update(){
						this.msg="欢迎";
					},
					destroy(){
						this.$destroy();
					}
				},
				beforeCreate(){
					console.log('loading');
					alert('组件实例刚刚创建,还未进行数据观测和事件配置');//创建前状态  el和data并未初始化
				},
				created(){//常用  创建完毕状态   完成了data数据的初始化  el没有

					alert("实例已经创建完成,并且已经进行数据观测和事件配置")
				},
				beforeMount(){  //挂载前状态 完成了el和data初始化
					this.msg="112233";
					alert("模板编译之前,还没挂载");
					//这个时候修改是可以修改data 里面的值的
				},
				mounted(){//常用  挂载结束状态  完成挂载

					alert("模板编译之后,已经挂载,此时才会有渲染页面,才能看到页面上数据的显示")
					//这里可以写获取到ajax 拿到的数据的旋绕逻辑
				},
				beforeUpdate(){   //更新前状态
					alert("组件更新之前");
				},
				updated(){   //更新完成状态
					alert("组件更新之后");
				},
				beforeDestroy(){   //销毁前状态
					alert("组件销毁之前");
				},
				destroyed(){  //销毁完成状态
					alert('组件销毁之后');
					//此处销毁指的是销毁实例 并不是销毁数据
				}
			});
		}
	</script>
</head>
<body>
	<div id="demo9">
	<p>{{msg}}</p>
		<br>
		 <button @click="update">更新数据</button>
		<button @click="destroy">销毁组件</button> 
	</div>
</body>
</html>

  


-----------------------------------------------------


计算属性 属性 不是方法


computed

计算属性和方法的区别 计算属性有个典型的


缓存 有一个缓存的机制


函数就会不停的调用 没有缓存机制

<!DOCTYPE html>
<html lang="zh-cn">
<head>
	<meta charset="UTF-8">
	<title>计算属性 (引用 缓存)</title>
	<link rel="stylesheet" href="lib/bootstrap/dist/css/bootstrap.css">
	<script stpe="text/javascript" src="lib/jquery/dist/jquery.js"></script>
	<script stpe="text/javascript" src="lib/bootstrap/dist/js/bootstrap.js"></script>
	<script stpe="text/javascript" src="vue/dist/vue.js"></script>
	<script>
		window.onload=function(){
			new Vue({
				el:'#demo10',// 2.0不允许挂载到html,body元素上
				data:{
					msg:'1241058165',
					num1:100
				},
				methods:{
					change:function(){
						this.num2 = 111; 
					},
					getNum2(){
						console.log(this.num2);//这里其实是 去 num2 的get里面了
					},
					getchange(){ //方法调用
						console.log("methods");
						//return this.num1-1;
					}
				},
				computed:{//计算属性 用来存储和处理数据 
					reverseMsg:function(){ //这个是属性
						return this.msg.split("").reverse().join("");//反转
						//计算属性 默认没有变更的时候  可以不写 get 和set  默认get
					},


					num2:{
						get:function(){
							console.log("get");
							return this.num1-1;
							//获取  num2 默认调用的就是这个
						},
						set:function(val){
							this.num1 = val;
							//修改
						}
					}
				}
				
			});
		}
	</script>
</head>
<body>
	<div id="demo10">
	<p>{{msg}}</p>
	<p>{{reverseMsg}}</p>	
	
	<!--计算属性值变更操作-->
 	<p>{{num2}}</p>
	<button @click="change">change</button>

	<!--计算属性获取-->
	<button @click="getNum2">get num2</button>



	

	</div>
</body>
</html>

  

-----------------------------------------------------

$watch


事件监听

<!DOCTYPE html>
<html lang="zh-cn">
<head>
	<meta charset="UTF-8">
	<title>计算属性 (引用 缓存)</title>
	<link rel="stylesheet" href="lib/bootstrap/dist/css/bootstrap.css">
	<script stpe="text/javascript" src="lib/jquery/dist/jquery.js"></script>
	<script stpe="text/javascript" src="lib/bootstrap/dist/js/bootstrap.js"></script>
	<script stpe="text/javascript" src="vue/dist/vue.js"></script>
	<script>
		var vm = null;
		window.onload=function(){
			vm = new Vue({
				el:'#demo11',// 2.0不允许挂载到html,body元素上
				data:{
					name:'moris',
					age:22,
					user:{
						id:100,
						name:''
					},
					ageChange:'',
					nameChange:''
				},
				methods:{
					changeUser(){
						this.user.name="xxxx"
					}
				},
				watch:{//只能监听到多个
					age:function(newValue, oldValue){
						console.log('ageChange'+'age被修改了', newValue, oldValue);
						this.ageChange = '我的年龄'+newValue +'我的姓名'+ this.name;
					},
					name:function(val) {
						this.nameChange ='nameChange'+ '我的姓名'+val +'我的年龄'+ this.age;
					},
					user:{
						handler:(newValue, oldValue) => {     //handler默认执行函数 也可以去掉
							console.log('user被修改了', newValue, oldValue);
						},
						deep:true //表示监视对象的属性变化,false则handler函数不执行,但此时看不到newValue与oldValue区别
						//为了发现对象内部值的变化,可以在选项参数中指定 deep: true 。注意监听数组的变动不需要这么做。
					}
				},
				computed: {
		            info: function () {
		                return 'computed'+'我的年龄'+this.age + '我的姓名' + this.name
		            }
		        }
			});

			//方式2
			vm.$watch('name', function(newValue, oldValue){
				console.log('name被修改了', newValue, oldValue);
			});
		}
	</script>
</head>
<body>
	<div id="demo11">
		<input type="text" v-model="name">
		<h3>{{name}}</h3>
		<input type="text" v-model="age">
		<h3>{{age}}</h3>
		<!-- age变化触发ageChange -->
		<h3>{{ageChange}}</h3>
		<input type="text" v-model="user.name">
		<h3>{{user.name}}</h3>
		<!-- name变化触发nameChange -->
		<h3>{{nameChange}}</h3>
		<!-- 与计算属性的区别 当监听到值发生变化时是过程式开发,比较笨重-->
		<h3>{{info}}</h3>



	</div>
</body>
</html>

  

-----------------------------------------------------

猜你喜欢

转载自www.cnblogs.com/shaozhu520/p/8997189.html