props,ref,emit,render使用

注册时: :子组件=父组件属性或方法
1、在子组件获取父组件data值 props 格式:<组件名 :子组件props中变量=“父组件内容”></组件名t>

	<!--父组件向子组件传值,属性名称也需要使用- -->
		<div id="app">	
			<my-component :parent-msg="msg"></my-component>
		</div>
			
		<template id="temp1">
			<div>
				<!--经过测试,子组件无法直接获取父组件中的data-->
				<div>{{title}}</div>
				<div>{{parentMsg}}</div>
				<button @click="changeMsg">修改</button>
			</div>
			
		</template>
		
		<script type="text/javascript">
			var vue =new Vue({
				el:"#app",
				data:{	
					msg:'我是父组件中message'
				},
				components:{
					'my-component':{
						template:"#temp1",
						data(){
							return {
								title:'我是标题'
							}	
						},
						//props中的数据都是通过父组件传给子组件的
						//props中的数据都是只读的,无法直接赋值
						//props建议使用对象,并给每一个props声明类型和默认值
						props:{
							parentMsg:{
								type:String,
								defult:null
							}
						},
						methods:{
							changeMsg(){
								this.parentMsg="我被修改了"
							}	
						}
							
					}
				}
			})
			
		</script>

2、在组件里使用 this.$emit(组件自定义方法,参数) == 调用vue 里方法

	<div id="myvue">
		<!-- <button @click = "myClick">调用方法</button> -->
		<com @mycomclick = "myshow"></com>
	</div>

	<template id = "mytempid">
		<div>
			<!-- 组件中的单机事件,调用的不是vue中的methods,而是组件中的methods, -->
			<!-- 调用组件内部按钮中的方法  单机-》组件中的methods->vue中的methods(必须自定义事件) -->
			<button @click ="myClick">调用方法</button>
		</div>
	</template>
	<script type="text/javascript">
		var com = {
				 template:"#mytempid",
				 data(){
					return {
						mymsg:'这是mycom组件中数据'
					}
				 },
				 methods:{
					 myClick(){
						this.$emit("mycomclick","黄宇军");//调用myshow() = $emit()
					 }
				 }
		}
		var vm = new Vue({
			el: '#myvue',
			data: {
				
			},
			methods: {
				myshow(params){
					// alert(this.$refs.mydiv.innerText)
					alert("hello world!...终于出来了!" + params);
					// this.$refs.mycom.myComponentShow()
				},
			},
			components:{
					com
				}
		})
	</script>

3、在父组件引用子组件和自身的属性值和方法 ref refs使用

<div id="myvue">
		<!-- 普通元素 -->
		<div ref = "mydiv">普通元素</div>

		<!-- 组件 -->
		<com ref = "mycom"></com>
		<button @click ="myVueShow">调用组件中的方法</button>
	</div>

	<template id = "mytempid">
		<div>
			mycom组件
		</div>
	</template>
	<script type="text/javascript">
		var com = {
				 template:"#mytempid",
				 data(){
					return {
						mymsg:'这是mycom组件中数据'
					}
				 },
				 methods:{
					 myComponentShow(){
						 alert('这是mycom组件中方法')
					 }
				 }
		}
		var vm = new Vue({
			el: '#myvue',
			data: {
				
			},
			methods: {
				myVueShow(){
					// alert(this.$refs.mydiv.innerText)
					alert(this.$refs.mycom);
					// this.$refs.mycom.myComponentShow()
				},
			},
			components:{
					com
				}
		})
	</script>

4、render 渲染

	<div id="myvue">
		<div>
			这是div元素
		</div>
	</div>

	<template id = "mytempid">
		<span>
			mycom组件
		</span>
	</template>
	<script type="text/javascript">
		var com = {
				 template:"#mytempid"
		}
		var vm = new Vue({
			el: '#myvue',
			data: {
				
			},
			methods: {
				
			},
			render:function(createElements){
				return createElements(com)//该参数可以将组件渲染成html
			}
		})
	</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值