Vue.js 第十二节:组件基础 复现

组件基础

基本事例

组件是一个可以重复利用的vue事例,可以封装一个组件达到快捷开发的目的。

  1. 用Vue.component("",{})函数来创建一个函数,函数的第一个参数为该组件的名称,可以使用驼峰法命名,也可使用短横线连接的方法命名,{}里描述了整个组件的数据和模版。
  2. 在试图中我们可以使用组件的名称作为标签,对组件进行调用。
  3. 可以对组件进行敷用。
  4. 每个组件的数据是封闭在组件的内部,相互独立的。
  5. 这些组件都是全局组册的.
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script type='text/javascript' src='vue.js'></script>
		<title></title>
	</head>
	<body>
		<div id='app'>			
			<button-counter></button-counter>
			<button-counter></button-counter>
			<button-counter></button-counter>
		</div>
		<script type="text/javascript">
			Vue.component('button-counter',{
				data: function(){
					return{
						count:0
					}
				},
				template:'<button v-on:click="count++">被点击了{{count}}次</button>'
			});
			var vm = new Vue({
				el: '#app',
				data:{
					
				}
			});
		</script>
	</body>
</html>

在这里插入图片描述

  • 可以用props属性为组件定义属性,并在标签中为其赋值.
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script type='text/javascript' src='vue.js'></script>
		<title></title>
	</head>
	<body>
		<div id='app'>			
			<button-counter title='1.'></button-counter> </br>
			<button-counter title='2.'></button-counter> </br>
			<button-counter title='3.'></button-counter>
		</div>
		<script type="text/javascript">
			Vue.component('button-counter',{
				props:	['title'], //为组件定义属性
				data: function(){
					return{
						count:0
					}
				},
				template:'<button v-on:click="count++">{{title}} 被点击了{{count}}次</button>'
			});
			var vm = new Vue({
				el: '#app',
				data:{
					
				}
			});
		</script>
	</body>
</html>

其输出结果如下:
在这里插入图片描述
其中我们必须注意一个组件必须具备一个根结点。

template:'<h1>hi</hi><button v-on:click="count++"
>{{title}} 被点击了{{count}}</button>'

这样声明将无法被正常渲染,可用< div >标签将其包裹起来。

添加事件的监听

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script type='text/javascript' src='vue.js'></script>
		<title></title>
	</head>
	<body>
		<div id='app'>			
			<button-counter title='1.' @click="clicknow"></button-counter'> </br>
			<button-counter title='2.' @click="clicknow"></button-counter> </br>
			<button-counter title='3.' @click="clicknow"></button-counter>
		</div>
		<script type="text/javascript">
			Vue.component('button-counter',{
				props:	['title'], //为组件定义属性
				data: function(){
					return{
						count:0
					}
				},
				template:'<div><h1>hi, little potato!</h1><br><button v-on:click="clickfun">{{title}} 被点击了{{count}}次</button></div>',
				methods:{
					clickfun : function () {
						this.count ++;
						this.$emit('clicknow', this.count);
					}
				}
			});
			var vm = new Vue({
				el: '#app',
		
				methods:{
					clicknow : function(e) {
						console.log(e);
					}
				}
			});
		</script>
	</body>
</html>

  • [ ] 为啥后台接受不到count数值
    在这里插入图片描述
    可以在组件内部加入< slot >标签即可在试图上加入任意的html标签
template:'<div><h1>hi, little potato!</h1><
br><button v-on:click="clickfun">{{title}} 被点击了{{count}}</button><slot></slot></div>',
<button-counter title='1.' @click="clicknow"><h1>hahaha</h1></button-counter> </br>

注明:
使用的是@clicknow绑定,而不是click:

<button-counter title='1.' @clicknow="clicknow"><h1>hahaha</h1></button-counter> </br>
			<button-counter title='2.' @clicknow="clicknow"></button-counter> </br>
			<button-counter title='3.' @click="clicknow"></button-counter>
		

在这里插入图片描述

发布了10 篇原创文章 · 获赞 0 · 访问量 161

猜你喜欢

转载自blog.csdn.net/yjj510818155/article/details/104756901