Vue 全局AIP 详解

所有demo均可以在技术胖博客找到,他的博客写得非常好,也经常更新一些新的知识,有兴趣的小伙伴可以移步去他的博客。链接:web前端技术

1.vue.directive自定义指令

<!DOCTYPE html>
<html>
<head>
	<title>vue.directive自定义指令</title>
</head>
<body>
	<h1>vue.directive自定义指令</h1>
	<hr>
	<div id="app">
		<div>定义一些属于自己的指令</div>
		<div v-jspang="red">{{count}}</div>
		<button @click="addCount">add</button>
	</div>

	<button onclick="unbind()">解绑</button>

	<script type="text/javascript" src="../assets/js/vue.js"></script>

	<script>

		function unbind(){
			app.$destroy()
		}
		// el: 指令所绑定的元素,可以用来直接操作DOM。
		// binding: 一个对象,包含指令的很多信息。
		// vnode: Vue编译生成的虚拟节点

		Vue.directive('jspang',{
			bind:function(el,binding){//被绑定
				el.style = 'color:'+binding.value
			    console.log('1 - bind');
			},
			inserted:function(){//绑定到节点

			    console.log('2 - inserted');
			},
			update:function(){//组件更新
			    console.log('3 - update');
			},
			componentUpdated:function(){//组件更新完成

			    console.log('4 - componentUpdated');
			},
			unbind:function(){//解绑
			    console.log('5 - unbind');
			}
		})

// 		bind:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个绑定时执行一次的初始化动作。
// 		inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于document中)。
//		update:被绑定于元素所在的模板更新时调用,而无论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
// 		componentUpdated:被绑定元素所在模板完成一次更新周期时调用。
// 		unbind:只调用一次,指令与元素解绑时调用。


		var app = new Vue({
			el:"#app",
			data:{
				count: 10,
				red:'red'
			},
			methods:{
				addCount(){
					this.count++;
				}
			}
		})
	</script>
</body>
</html>

2.Vue.extend构造器的延伸

<!DOCTYPE html>
<html>
<head>
	<title>Vue.extend构造器的延伸</title>
</head>
<body>
	<h1>Vue.extend构造器的延伸</h1>
	<hr>
	<div id="app">
		<div>当在模板中遇到该组件名称作为标签的自定义元素时,会自动调用“扩展实例构造器”来生产组件实例,并挂载到自定义元素上</div>
		<author></author>
	</div>

	<script type="text/javascript" src="../assets/js/vue.js"></script>
	<script type="text/javascript">
		var authorExtend = Vue.extend({
			template:"<p><a :href='authorURL'>{{authoName}}</a></p>",
			data:function(){
				return{
					authoName: ' 小镇青年,心怀远方 ',
					authorURL:'https://blog.csdn.net/sinat_34531165/'
				}
			}
		}) 

		new authorExtend().$mount('author')
	</script>
	<script>
		var app = new Vue({
			el:"#app",
			data:{
				message:"你好,世界!"
			}
		})
	</script>
</body>
</html>

3.Vue.set全局操作

<!DOCTYPE html>
<html>
<head>
	<title>Vue.set全局操作</title>
</head>
<body>
	<h1>Vue.set全局操作</h1>
	<hr>
	<div id="app">
		<div>Vue.set 的作用就是在构造器外部操作构造器内部的数据、属性或者方法。</div>
		<div>{{count}}</div>
		<button @click="vueAdd">Vue对象的方法添加</button>
	</div>
	<button onclick="vueSet()">Vue.set改变</button>
	<button onclick="add()">直接操作外部数据</button>

	<script type="text/javascript" src="../assets/js/vue.js"></script>
	
	<script type="text/javascript">

	</script>
	<script>
		var outData = {
			count:0
		}

		function vueSet(){
			Vue.set(outData,'count',0)
		}
		function add(){
			outData.count++;
		}
		var app = new Vue({
			el:"#app",
			data:outData,
			methods:{
				vueAdd(){
					this.count++;
				}
			}
		})
	</script>
</body>
</html>

由于Javascript的限制,Vue不能自动检测以下变动的数组。当你利用索引直接设置一个项时,vue不会为我们自动更新。当

你修改数组的长度时,vue不会为我们自动更新。

4.Vue.set番外篇

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="../assets/js/vue.js"></script>
    <title>Vue.set 全局操作</title>
</head>
<body>
    <h1>Vue.set 全局操作</h1>
    <hr>
    <div id="app">
    	<div>
    		由于Javascript的限制,Vue不能自动检测以下变动的数组。当你利用索引直接设置一个项时,vue不会为我们自动更新。当你修改数组的长度时,vue不会为我们自动更新。
    	</div>
    	<div>{{count}}</div>
        <ul>
            <li v-for="item in arr">{{item}}</li>
            <button @click="pushArr()">内部更改</button>
        </ul>
    </div>
    <button onclick="add()">外部添加</button>
 	<button onclick="addSet()">v.set外部添加</button>
    <script type="text/javascript">
    	var outData = {
    		count:0,
    		arr:['aaa','bbb','ccc']
    	}
    	function add(){
    		//如果注释掉这行 则下行不会被监听到
    		// outData.count++; 
    		app.arr[1] = 'ddcccd';
    		console.log('我已经执行了');
    	}
    	function addSet(){
    		let i = outData.count++; 
    		Vue.set(app.arr,1,i)
    	}

       	var app = new Vue({
    		el:"#app",
    		data:outData,
    		methods:{
    			pushArr(){
    				app.arr[1] = 'ddd';
    				console.log('我已经执行了')
    			}
    		}
       	})
    </script>
</body>
</html>

5.Vue 的生命周期

<!DOCTYPE html>
<html>
<head>
	<title>Vue 的生命周期</title>
</head>
<body>
	<h1>Vue 的生命周期</h1>
	<hr>
	<div id="app">
		<div>{{count}}</div>
		<button @click="add">add</button>
	</div>
	
	<button onclick="app.$destroy()">销毁 解绑</button>


	<script type="text/javascript" src="../assets/js/vue.js"></script>

	<script>
		var app = new Vue({
			el:"#app",
			data:{
				count:0
			},
			methods:{
				add(){
					this.count++;
				}
			},
			beforeCreate(){
				console.log("1-beforeCreate 初始化之后");
			},
			created(){
				console.log("2-created 创建完成");
			},
			beforeMount(){
				console.log("3-beforeMount 挂载之前");
			},
			mounted(){
				console.log("4-mounted 被创建");
			},
			beforeUpdate(){
				console.log("5-beforUpdeta 数据更新之前")
			},
			updated(){
				console.log("6-updated 数据更新之后")
			},
			activated(){
				console.log("7-activated")
			},
			deactivated(){
				console.log("8-activated")
			},
			beforeDestroy(){
				console.log("8-beforeDestroy 销毁之前")
			},
			destroyed(){
				console.log("8-destroyed 销毁之后")
			}
		})
	</script>
</body>
</html>

6.Template 制作模版

<!DOCTYPE html>
<html>
<head>
	<title>Template 制作模版</title>
</head>
<body>
	<h1>Template 制作模版</h1>
	<hr>
	<div id="app">{{message}}</div>



	<script type="text/javascript" src="../assets/js/vue.js"></script>

	<script>
		var app = new Vue({
			el:"#app",
			data:{
				message:"你好,世界!"
			},
			template:`
				<div style="color:red;">直接在构造器里的template选项后边编写。这种写法比较直观,但是如果模板html代码太多,不建议这么写。</div>
			`
		})
	</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
	<title>Template 制作模版</title>
</head>
<body>
	<h1>Template 制作模版</h1>
	<hr>
	<div id="app">{{message}}</div>

	<template id="demo2">
		<h2 style="color:red;">template标签里的模板</h2>
	</template>

	<script type="text/javascript" src="../assets/js/vue.js"></script>

	<script>
		var app = new Vue({
			el:"#app",
			data:{
				message:"你好,世界!"
			},
			template:"#demo2"
		})
	</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
	<title>Template 写在script标签里的模板</title>
</head>
<body>
	<h1>Template 写在script标签里的模板</h1>
	<hr>
	<div id="app">{{message}}</div>

	<script type="x-template" id="demo3">
		<h2 style="color:red;">Template 写在script标签里的模板,这种写模板的方法,可以让模板文件从外部引入。</h2>
	</script>

	<script type="text/javascript" src="../assets/js/vue.js"></script>

	<script>
		var app = new Vue({
			el:"#app",
			data:{
				message:"你好,世界!"
			},
			template:"#demo3"
		})
	</script>
</body>
</html>

7.Component 初识组件

<!DOCTYPE html>
<html>
<head>
	<title>Component 初识组件</title>
</head>
<body>
	<h1>Component 初识组件</h1>
	<hr>
	<div>前言(废话):component组件是Vue学习的重点、重点、重点,重要的事情说三遍。所以你必须学好Vue component。其实组件就是制作自定义的标签,这些标签在HTML中是没有的。比如:,那我们就开始学习这种技巧吧</div>
	<hr>
	<div id="app">
		{{message}}
		<jspang></jspang>
		<panda></panda>

		<div>组件注册的是一个标签,而指令注册的是已有标签里的一个属性。在实际开发中我们还是用组件比较多,指令用的比较少。因为指令看起来封装的没那么好,这只是个人观点。</div>
	</div>



	<script type="text/javascript" src="../assets/js/vue.js"></script>

	<script>
		// 注册全局组件
		Vue.component('jspang',{
			template:`
				<div style="color:red;">全局化注册的jspang标签</div>
			`
		})
		var app = new Vue({
			el:"#app",
			data:{
				message:"你好,世界!"
			},
			components:{
				'panda':{
					template:`
						<div style="color:blue;">局部注册组件局部,构造器里的components 是加s的,而全局注册是不加s的。</div>
					`
				}
			}
		})
	</script>
</body>
</html>

8.Component 组件props 属性设置

<!DOCTYPE html>
<html>
<head>
	<title>Component 组件props 属性设置</title>
</head>
<body>
	<h1>Component 组件props 属性设置</h1>
	<hr>
	<div id="app">
		<panda :formhere="message"></panda>
	</div>



	<script type="text/javascript" src="../assets/js/vue.js"></script>

	<script>
		var app = new Vue({
			el:"#app",
			data:{
				message:"你好,世界!"
			},
			components:{
				panda:{
					template:`<div style="color:red;">Panda from {{formhere}}</div>`,
					props:["formhere"]
				}
				
			}
		})
	</script>
</body>
</html>

9.Component 父子组件关系

<!DOCTYPE html>
<html>
<head>
	<title>Component 父子组件关系</title>
</head>
<body>
	<h1>Component 父子组件关系</h1>
	<hr>
	<div id="app">
		<div v-text="message"></div>
		<div>mes:{{message}}</div>
		<father></father>
	</div>

	

	<script type="text/javascript" src="../assets/js/vue.js"></script>

	<script>
		var son = {
			template:`
				<div style="color:#ffc107;">
					外部构造器 son,子组件必须写在父组件前面,否则会报错
				</div>
				`
		}
		var father = {
			template:`
				<div>
					<div>外部构造器 Father</div>
					<son></son>
				</div>

			`,
			components:{
				"son":son
			}
		}

		
		var app = new Vue({
			el:"#app",
			data:{
				message:"你好,世界!"
			},
			components:{
				"father":father
			}
		})
	</script>
</body>
</html>

10.Component 标签

<!DOCTYPE html>
<html>
<head>
	<title>Component 标签</title>
</head>
<body>
	<h1>Component 标签</h1>
	<hr>
	<div>Vue框架自定义的标签,它的用途就是可以动态绑定我们的组件,根据数据的不同更换不同的组件</div>
	<div id="app">
		{{message}}

		<component-a></component-a>
		<component-b></component-b>
		<component-c></component-c>
		<hr>
		<component :is="who"></component>	
		<button @click="changeComponent">动态切换组件</button>
	</div>



	<script type="text/javascript" src="../assets/js/vue.js"></script>

	<script>
		var componentA = {
			template:`<div style="color:red;">我是componentA</div>`
		}
		var componentB = {
			template:`<div style="color:green;">我是componentB</div>`
		}
		var componentC = {
			template:`<div style="color:pink;">我是componentC</div>`
		}
		var app = new Vue({
			el:"#app",
			data:{
				message:"你好,世界!",
				who: 'componentA'
			},
			components:{
				"componentA":componentA,
				"componentB":componentB,
				"componentC":componentC
			},
			methods:{
				changeComponent(){
					if (this.who == 'componentA') {
						this.who = 'componentB'
					}else if(this.who == 'componentB'){
						this.who = 'componentC'
					}else if(this.who == 'componentC'){
						this.who = 'componentA'
					}
				}
			}
		})


	</script>
</body>
</html>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值