Vue——Vue的组件化

Vue——邂逅Vue
Vue——Vue的基础语法
Vue——Vue的组件化
Vue——slot_插槽的基本使用

1:组件化的介绍和使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>		
	</head>
	<body>
		<div id="demo">		
			<cpn></cpn>
		</div>
		
		<script>
			const cpn=Vue.extend({
				template: '<div><h1>dada</h1></div>'
						
			});
			Vue.component('cpn',cpn)
		</script>
	</body>
</html>

2:组件步骤解析

在这里插入图片描述
在这里插入图片描述

3:全局组件和局部组件

在这里插入图片描述
以下演示局部组件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>	
	</head>
	<body>
		<div id="demo">		
			<cpns></cpns>
		</div>
		
		<script>
			const cpn=Vue.extend({
				template: '<div><a>dadadd</a></div>'
						
			});
			console.log(1);
			Vue.component('cpns',cpn);
			console.log(2);
			
			//局部组件
            const demo=new Vue({
				el: '#demo',
				components: {
					cpns: cpn
				}
			})
		</script>		
	</body>
</html>

4:父组件和子组件

在这里插入图片描述
代码演示


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		
	</head>
	<body>
		<div id="demo">
			<mycp></mycp>
		</div>
		<script>
			const cpp=Vue.extend({
				
				template: '<div><h1>ppp</h1></div>',

			})
			const cps=Vue.extend({
				
				template: '<div><h1>sss</h1><cpp></cpp></div>',
				components: {
					cpp: cpp
				}
			})
			
			const demo=new Vue({
				el: "#demo",
				components: {
					mycp: cps
				}
			})	
		</script>
	</body>
</html>

5:注册组件的语法糖

在这里插入图片描述
代码示例如下

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		
	</head>
	<body>
		<div id="demo">		
			<cpns></cpns>
		</div>
		
		<script>
            const demo=new Vue({
				el: '#demo',
				components: {
					cpns: {
				template: '<div><a>dadadd</a></div>'
						
			}
				}
			})
		</script>		
	</body>
</html>

6:组件模板抽离的方法

在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		
	</head>
	<body>
		<div id="demo">
			<mycp></mycp>
		</div>
		<template id="demo1">
			<div>
				<h1>sss</h1>
			</div>
		</template>
		<script>
			const cpp=Vue.extend({
				
				template: '#demo1',

			})
			
			const demo=new Vue({
				el: "#demo",
				components: {
					mycp: cpp
				}
			})

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

7:组件数据的存放

在这里插入图片描述
在这里插入图片描述

如果 Vue 没有这条规则(data必须是函数),点击一个按钮就可能会影响到其它所有实例:

组件存放数据演示

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		
	</head>
	<body>
		<div id="demo2">
			<mycp></mycp>
		</div>
		
		<template id="demo">
			<div>
			<h2>{{message}}</h2>
			<h1>dadad</h1>
			</div>
		</template>
		<script>
            const a=Vue.extend({
				
				template: '#demo',
				data() {
					return {
						message: 11
					}
				}									
			})
					
		    const demo=new Vue({
				el: '#demo2',
				components: {
					mycp: a
				}
			})
		</script>
	</body>
</html>

8:父子组件的通信

在这里插入图片描述

8.1 props基本用法——父传子

在这里插入图片描述
代码示例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		
	</head>
	<body>
		<div id="app">
			<mycp v-bind:datas="datas"></mycp>
			
		</div>
		<template id="demo">
			<div>{{datas}}</div>
			
		</template>
		<script>

			const cps=Vue.extend({
				
				template: '#demo',
				props: ['datas'],
			})
			
			const app=new Vue({
				el: "#app",
				data: {
					datas: ['daa','aaa','aaa']
				},
				components: {
					'mycp': cps
				}
			})

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

8.1.1 props数据验证

在这里插入图片描述

8.1.2 父组件访问子组件:$children

在这里插入图片描述
代码演示:


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		
	</head>
	<body>
		<div id="app">
			<mycp v-bind:datas="datas"></mycp>
			<button v-on:click="btnclick()">点击</button>
			
		</div>
		<template id="demo">
			<div>{{datas}}
			</div>
		</template>
		<script>

			const cps=Vue.extend({
				
				template: '#demo',
				props: ['datas'],

				
			})
			
			const app=new Vue({
				el: "#app",
				data: {
					datas: ['daa','aaa','aaa']
				},
				components: {
					'mycp': cps
				},
				methods: {
					btnclick(){
						console.log(this.$children[0].name)
					//	console.log(this.$children.datas[0])
					}
				}
			})

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

8.2 子传父

在这里插入图片描述
代码演示


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		
	</head>
	<body>
		<div id="app">
			<mycp v-on:itemclick="accpetnews"></mycp>
			
		</div>
		<template id="demo">
			<div>
				<button type="button" v-for="item in species" v-on:click="btnclick(item)">{{item.name}}</button>
				
			</div>			
		</template>
		<script>

			const cps=Vue.extend({
				
				template: '#demo',
				data() {
					
					return {
						species: [{id: 'aa',name: '游戏'},
						{id: 'bb',name: '生活'},
						{id: 'cc',name: '学习'}
						]
					
					}
				},
				methods: {
					btnclick(item) {
						//console.log(item)
						//子组件发送事件
						this.$emit('itemclick')
					}
				}
			})
			
			const app=new Vue({
				el: "#app",
				data: {
					datas: ['daa','aaa','aaa']
				},
				components: {
					'mycp': cps
				},
				methods: {
					accpetnews(){
						console.log(1)
						
					}
				}
			})		
		</script>
	</body>
</html>

在这里插入图片描述

8.2.1 子组件访问父组件:$parent

在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		
	</head>
	<body>
		<div id="app">
			<mycp v-bind:datas="datas"></mycp>
			
		</div>
		<template id="demo">
			<div>{{datas}}
			<button v-on:click="btnclick()">点击</button>
			</div>
			
			
		</template>
		<script>

			const cps=Vue.extend({
				
				template: '#demo',
				props: ['datas'],
                methods: {
					btnclick(){
						console.log(this.$parent)
					//	console.log(this.$children.datas[0])
					}
				}
				
			})
			
			const app=new Vue({
				el: "#app",
				data: {
					datas: ['daa','aaa','aaa']
				},
				components: {
					'mycp': cps
				}
		
			})

			
		</script>
	</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值