父组件、子组件传值
1. 前言
在前面小节中,我们学习了系统预设组件的使用、自定义组件的创建与使用,日常开发过程中,经常会有组件之间互相传值的需求。这一小节我们来了解一下如何在组件与组件之间传值。
为了方便描述,我们将组件分为了父组件与子组件,那如何区分哪个是父组件,哪个是子组件呢?
2. 区分父组件、子组件
父组件、子组件是一对相对的名词,只是为了来更方便的区分组件,一个组件既可以是父组件,也可以是子组件。
可能文字不太好理解,下面我们来举个实际开发中的例子。
上一小节我们创建了一个自定义登录弹窗组件 login.vue,并在首页 index.vue 文件中引用了这个组件。其中index.vue 就是父组件,而被引用的登录弹窗组件 login.vue 就是子组件。
3. 父组件向子组件传值
3.1 父组件添加 data 变量
data() {
return {
text:"我是父组件的值"
};
}
3.2 使用 login 组件的时候传递值
3.3 在子组件中接收值
<script>
export default {
props:['text']
}
</script>
3.5 查看效果
点击工具栏–运行–运行到内置浏览器,会出现以下效果:
4. 子组件向父组件传值
编辑 pages/index/index.vue 文件。
4.1.1 在 data 中添加 isShow 变量
data() {
return {
text:"我是父组件的值",
isShow:true
};
}
4.1.2 v-if 控制组件显示
4.2 在子组件中通过 $emit 触发事件向父组件传值
编辑 components/login/login.vue 文件。
<button @click="sendMsg">授权登录</button>
4.2.2 创建点击事件,并向父组件传值
methods:{
sendMsg () {
this.$emit('isShow',false)
//传递多个参数
//this.$emit('isShow',[false,"你好"])
}
}
4.3 父组件接收参数
回到父组件,编辑 pages/index/index.vue 文件。
4.3.1 指定接收事件
在 Login 标签上面接收从子组件传递过来的事件 isShow,不要忘记 isShow 前面有@符号。并指定接收事件为 getShow。
<Login v-if="isShow" :text="text" @isShow="getShow"></Login>
4.3.2 自定义事件并打印参数
下面我们会继续创建 getShow 事件,打印出从子组件传递过来的参数,并将isShow 变量赋值为子组件传过来的 false 值。
methods:{
getShow(res){
console.log("从子组件传递过来的值",res)
this.isShow = res
}
}
4.4 查看效果
从子组件传递过来的值 false
5. 小结
本节课程我们主要学习了父组件和子组件之间的参数传递,本节课程的重点如下: