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:組件數據的存放

在這裏插入圖片描述
在這裏插入圖片描述
組件存放數據演示

<!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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章