Vue组件化(全局、局部)、props传参

目录

全局组件化

带参数传递的全局组件化(props方式)

局部组件化

带参数传递的局部组件化(props方式)

自定义组件使用注意


全局组件化

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
		<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	<script src="https://cdn.bootcss.com/axios/0.17.0/axios.min.js"></script>
</head>
<body>
	<!-- 第一种写法 -->
	<div id="box"><quanju></quanju></div>
	
	<!-- 第二种写法,写在网页端 -->
	<div id="div1"><seccc></seccc></div>
	
	<!-- 第二种写法,自定义内容(第二种推荐写法) -->
	<template id="tt3"><h1 @click="fn1()">自定义标签的第二种写法</h1><span></span></template>
	
	<script type="text/javascript">
		//全局组件化,格式: component(自定义标签名,标签和内容,但需要注意,根只有一个)
		//错误示范: template:"<div></div><div></div>" 必须只有一个大的范围包围,不能并行
		//第一种写法,可读性极差
		Vue.component("quanju",{template:"<h1>hello world </h1>"});
		var vm=new Vue({
			el:"#box"
		});

		//第二种写法,推荐
		Vue.component("seccc",
			{ 
			 template:"#tt3",
			 //也可以设置属性,但只能在组块内使用
			 data:function(){
			  	return {mes:"吴师傅",age:18}
			  },
			  methods:{
			  	fn1(){
			  		console.log("也可以有方法的哦");
			  	}
			  }
			})
		var tm=new Vue({
			el:"#div1"
		});
	</script>
</body>
</html>`

带参数传递的全局组件化(props方式)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	<script src="https://cdn.bootcss.com/axios/0.17.0/axios.js"></script>
</head>
<body>
	<div id="box">

	<!-- 由于下面定义的标签名有大写,所以只能写成这样 -->
	<my-con message="吴师傅" age="18"></my-con>
	<my-con message="李师傅" age="18"></my-con>
	<my-con message="陈师傅" age="18"></my-con>
	
	</div>

	<!-- 自定义组件内容,直接在template内写{{}}是没用的,必须要用div或者其他网页元素包裹! -->
	<template id="tt"><div> {{message}} {{age}} {{canshu}}</div></template>
	<script type="text/javascript">
		//全局组件化带参数
		Vue.component("myCon",{
			//props方式传参
			props:["message","age"],
			//用标准格式写组建(在html里面定义,对应网页标签的template的id)
			template:"#tt",
			data:function(){
				return {canshu:"这是data里面的参数,不是传参的哦!"}
			}
		});
		var vm=new Vue({
			el:"#box"
		});
	</script>
</body>
</html>


局部组件化

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	<script src="https://cdn.bootcss.com/axios/0.17.0/axios.min.js"></script>
</head>
<body>
	<div id="box"><text1></text1><text2></text2></div>


	<template id="myText"><h1 @click="fn2()">{{msg}}{{age}}</h1></template>

	<script type="text/javascript">
		var vm=new Vue({
			el:"#box",
			data:{},
			//局部组件化写法
			components:{
				//第一种写法:在template里面直接输入内容
				"text1":{
					//注意:在组建里面的data和methods只能在组建内容里面使用,不能在外面引用
					template:`<div><h1 @click="fn1()">直接写在template里面</h1>{{msg}}{{19}}</div>`,
					//自定义组件里面也有自己的方法和属性
					data:function(){
						return{msg:"吴师傅",age:19} 
					},
					methods:{
						fn1:function(){
							console.log("局部组建里面的方法");
						}
					}
				},//text1
				//第二种写法(推荐用这种,客观性强)
				"text2":{
					template:"#myText",
					//组件里面的data写法比较怪异
					data:function(){
						return {msg:"吴师傅哈哈",age:30}
					},
					methods:{
						fn2:function(){
							console.log("第二种写法的方法");
						}
					}
				}
			}//components
		});
	</script>
</body>
</html>

带参数传递的局部组件化(props方式)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	<script src="https://cdn.bootcss.com/axios/0.17.0/axios.min.js"></script>
</head>
<body>
	<div id="box">
		 <!-- 这样引用方法是无效的,组件内的触发方法只能在组件模板内使用,在网页上此标签会被翻译模板内的内容 -->
		<biao-qian name="吴师傅" age="18" @click="fn2()"></biao-qian>
	</div>

	<!-- 自定义组件以及组件内的内容,切记一定要用网页元素包裹起来!!!!方法和参数只能用局部的,不能使用Vue的 -->
	<template id="tt"><div @click="fn1()">{{"参数的名字是:"+name}}{{"传参的年龄是:"+age}}</div></template>

	<script type="text/javascript">
		//局部组件化
		var vm=new Vue({
			el:"#box",
			data:{},
			methods:{
				fn2(){
					console.log("Vue内的方法");
				}
			},
			components:{
				//定义一个名biaoQian的网页标签
				"biaoQian":{
					//传参的参数名,参数名必须用双引号包裹,并且参数名不建议用关键字如name class等
					props:["name","age"],
					template:"#tt",
					//局部组件内的自定义参数
					data:{},
					//局部组件内的方法
					methods:{
						fn1(){
							console.log("局部组件内的参数只能在局部组件内使用哦")
						}
					}
				}
			}
		});
	</script>
</body>
</html>

自定义组件使用注意

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
	<script src="https://cdn.bootcss.com/axios/0.17.0/axios.min.js"></script>
</head>
<body>
	<!-- 连续两个大写字母,都要在前面加"-"再小写 -->
	<div id="box"><te-t-td></te-t-td></div>
	<!-- Vue和组建都有一个mes,在模板里都是用局部的mes,不会用vue的 -->
	<template id="myte"><div><h1 @click="fn1()">{{msg}}</h1></div></template>
	<script type="text/javascript">
		var vm=new Vue({
			el:"#box",
			data:{msg:"李师傅"},
			components:{
				"teTTd":{
					template:"#myte",
					data:function(){
						return {msg:"吴师傅",age:18}
					},
					methods:{
						fn1(){
							console.log("有大写的自定义标签,全部都换成小写,并在大写字母前添加-")
						}
					}
				}
			}
		});
	</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/chijiajing/article/details/82822126