【IMWeb训练营作业】组件间通讯

1.目录结构


2. HTML 基础骨架以及自定义标签的使用

	<div id="app">
		<div style="float: left;">
			<h2>自定义下拉框</h2>
			<!-- 自定义标签 (使用组件)-->
			<custom-select but-value="查询" :lists="list1"></custom-select>
		</div>
		<div style="float: left;">
			<h2>自定义下拉框2</h2>
			<!-- 使用  v-bind:来动态的绑定数据并通过自定义属性向子组件传递数据 -->
			<custom-select but-value="搜索" :lists="list2"></custom-select>
		</div>		
	</div>

3.Vue 全局组件注册(封装在 main.js 中)

Vue.component("custom-select", {	//全局注册一个组件
		data:function(){
			//返回各自的数据对象
			return {
				selectShow:false,
				val:"",
			};
		},
		props:["butValue", "lists"],
		template:`<section class="warp">
						<div class="searchIpt clearFix">
							<div class="clearFix">
								<input type="text" class="keyWord" @click="selectShow = !selectShow" :value="val" />
								<input type="button" :value="butValue">
								<span></span>
							</div>
							<custom-list v-show="selectShow" :lists="lists" v-on:receive="changeValue" >
							</custom-list>
						</div>
					</section>`,
		methods:{
			changeValue(value){
				this.val = value;
				this.selectShow = false;
			}
		}
	});
	
	//将 ul 标签单独分离出来,降低其父组件的耦合性
	Vue.component("custom-list", {
		props:["lists"],
		template:`	<ul class="list">
						<li v-for="item of lists" @click="selectValueHandle(item)">{{item}}</li>
					</ul>
				`,
		methods:{
			//通过子组件的点击事件向父组件传递数据,子组件 ---> 父组件
			//告诉父组件需要改变val的值需要触发一个自定义事件
			selectValueHandle:function(item){
				this.$emit("receive", item);
			}
		}
	});

4. 效果图



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值