• 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>
    

      

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

  • 相关阅读:
    堆得简单介绍以及堆排序
    从交换两个变量的值来看程序员的“奇技淫巧”
    两道有意思的题目
    mac上使用brew
    安全考虑,binlog_row_image建议尽量使用FULL
    Python3.6新特性
    自动化测试基础篇--Selenium浏览器操作
    自动化测试基础篇--Selenium Xpath定位
    自动化测试基础篇--Selenium元素定位
    自动化测试基础篇--Selenium Python环境搭建
  • 原文地址:https://www.cnblogs.com/shaozhu520/p/8997189.html
Copyright © 2020-2023  润新知