关于父类组件与子类组件的互相传值

第一步:子类向父类传值

 在java中父类是可以将值传给子类的,但是却不能从子类拿到值,同理子类是可以将父类的值拿到手,但是却不能将自己的值传给父类

而在vue中,子类和父类之间是不允许传值的但是,我们可以利用关联和引用来让他们之间建立起一些联系

子类向父类传值要使用$emit方法

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://cdn.bootcss.com/vue/2.5.14/vue.min.js"></script>
</head>
<body>
	 <!--  子传父:逆传值 -->
	<div id="box">
		<parent></parent>
	</div>

	<template id="tt1">
		<div>
		<child @rrt="fn2()"></child>
		</div>
	</template>

	<template id="dd1">
		<div>
		  <img src="images/6.png">
		  <span>首页</span>
		  <span @click="fn1()">{{msg}}</span>
		</div>
	</template>
   <script>
   	var vm=new Vue({
   		el:"#box",
   		data:{},
   		components:{
   			"parent":{
   				template:"#tt1",
   				methods:{
   					fn2:function(){
   						console.log("dfghj")
   					}
   				},
   				components:{
   					"child":{
   						template:"#dd1",
   						data:function(){
   							return{
   								msg:"你好"
   							}
   						},
   						methods:{
   							fn1:function(){
   								this.$emit("rrt")
   							}
   						}
   					}
   				}
   			}
   		}
   	})
   </script>
</body>
</html>

为了方便理解,我们就从父类开始分析他们之间的联系

1首先父类定义了一个用来接收子类准备返回值的方法——fn2()该方法触发按钮和事件,它只是等待子类使用emit方法来触发它

2然后我们给该方法取了个别名绑定到一个叫做@rrt的方法名上,该不处理是在父类组件中引用子类组件的时候传递给子类组件的

3然后子类组件中有一个方法叫做fn1(),该方法是由button按钮触发的,但我们点击按钮的时候,该方法体内部的

this.$emit("rrt")会绑定父类fn2()方法,通过点击“你好”,打印出dfghj

步骤不多:一共就是父类监听,然后取个别名传给子组件,子组件使用emit调用别名,并返回值给父类监听方法

第二步:父组件向子组件传递值

这种就比上一种还要简单点

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://cdn.bootcss.com/vue/2.5.14/vue.min.js"></script>
</head>
<body>
    <!-- 父传子 -->
	<div id="box">
		<parent v-bind:mess="msg">
			
		</parent>
	</div>
    <template id="tt2">
    	<div>
    		<h1 v-bind:message="mess">父类文字内容{{mess}}<child></child></h1>
    	</div>
    </template>

    <template id="dd2">
    	<h2>子类文字内容{{message}}</h2>
    </template>

    <script>
    	var vm=new Vue({
    		el:"#box",
    		data:{
    			msg:"仙剑奇侠传"
    		},

    		components:{
    			"parent":{
                    template:"#tt2",
                    props:["mess"],
                    components:{
                    	"child":{
                    		 /*props与template或el同一地位*/
                    		template:"#dd2",
                    		props:["message"],

                    	}
                    }
    			}
    		}
    	})
    </script>
</body>
</html>

这里我们所做的就是将最外围的vue的msg值传递到最里层的子组件中去

我们第一步将值从vue传递到父组件,在div#box中引用父组件的时候,就将msg去个别名赋给:mess

然后父组件定义props:【“mess”】接收了该值,然后在父组件的template中引用子组件的标签的时候将mess取个别名

:message=”mess“,同理子啊子组件的props:【”message“】也定义了一番,然后就可以在子组件的template中直接使用{{message}}来接收来自父组件的值了。

猜你喜欢

转载自blog.csdn.net/ybb520chongren_/article/details/82861353