Vue父子组件之间的相互通信
组件是Vue知识体系中最重要的一部分之一,父子组件由于作用域的不同,无法直接对对方的数据进行操作。它们之间的数据传递都是通过中间介质进行的,父组件给子组件传值是通过props属性,而子组件给父组件传值是通过自定义事件。
1.父组件向子组件传值
<div id="app">
<parent></parent>
</div> <template id="parent">
<div>
<div style="border:1px solid red;width: 300px;">
<h1>父组件</h1>
<p>{{parentMsg}}</p>
</div>
<child :get-parent="parentMsg"></child>
</div>
</template> <template id="child">
<div>
<h1>子组件</h1>
<p>{{childMsg}}</p>
<button @click="printParentMsg()">父组件信息</button>
</div>
</template> <script> var child={
data(){
return {
childMsg:"我是子组件数据"
}
},
template:"#child",
props: ['getParent'],
methods: {
printParentMsg(){
alert('父组件信息:' + this.getParent);
}
}
}; var parent={ data(){
return {
parentMsg:"我是父组件的数据"
}
}, components:{
'child':child
}, template: '#parent'
} new Vue({
el:"#app",
components:{
'parent':parent
}
}); </script>
具体方法:
1.子组件在props中创建一个属性,用来接收父组件传来的值
2.父组件中注册子组件
3.在父组件模板中的子组件标签添加对应于子组件props中的属性
4.把需要传递的值赋给上一步子组件标签创建的属性(这里要注意的是props中的属性用驼峰命名法,标签中的属性用横杠命名法)
2.子组件向父组件传值
<div id="app">
<parent></parent>
</div> <template id="parent">
<div>
<div style="border:1px solid red;width: 300px;">
<h1>父组件</h1>
<p>{{parentMsg}}</p>
</div>
<child v-on:receive-msg="handleMsg"></child>
</div>
</template> <template id="child">
<div>
<h1>子组件</h1>
<p>{{childMsg}}</p>
<button @click="sendToParent">传递信息</button>
</div>
</template> <script> var child={
data(){
return {
childMsg:"我是子组件数据"
}
},
template:"#child",
props: ['getParent'],
methods: {
sendToParent(){
console.log('sendToparent')
this.$emit("receive-msg", "已经收到子组件传来的消息");
}
}
}; var parent={ data(){
return {
parentMsg:"我是父组件的数据"
}
}, components:{
'child':child
}, template: '#parent', methods: {
handleMsg: function(msg){
console.log('handleMsg')
alert(msg);
}
}
} new Vue({
el:"#app",
components:{
'parent':parent
}
}); </script>
具体方法:
1.子组件在某种条件下触发一个自定义事件
2.该自定义事件需要挂载在父组件的子组件标签上,让父组件可以监听到这个自定义事件
3.将需要传的值放在$emit方法的第二个参数上,该值将作为实参传递给响应自定义事件的方法
(注意!这里有个小坑:自定义事件貌似不支持驼峰命名法,改用横杠命名即可,否则会接收不到值)
Vue父子组件之间的相互通信的更多相关文章
- VUE 自定义组件之间的相互通信
一.自定义组件 1.全局自定义组件 我们在var vm = new Vue({});的上面并列写上Vue.component('自定义组件名',{组件对象});来完成全局自定义组件的声明.示例代码如下 ...
- 【转】vue父子组件之间的通信
vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不同情况下又各有不同.最常见的就是父组件为控制组件子组件为视图组件.父组件传递数据给子组件使 ...
- VUE 父子组件之间通信传值 props和 $emit
1.父组件传值给子组件 $props,子组件传值给父组件 $emit 父组件 <div id="app" > <tr ...
- 浅谈vue父子组件之间的传值
前言:本章主要说下父子组件的传值,为商品列表组件之间的传值做一个基础预热.Github:https://github.com/Ewall1106/mall(请选择分支chapter23) 1.父组件向 ...
- vue父子组件之间传值
vue父子组件进行传值 vue中的父子组件,什么是父组件什么是子组件呢?就跟html标签一样,谁包裹着谁谁就是父组件,被包裹的元素就是子组件. 父组件向子组件传值 下面用的script引入的方式,那种 ...
- vue父子组件之间互相获取data值&调用方法(非props)
vue 子组件调用父组件方法&数据 vue有$parent这么一个属性,在子组件中就能拿到父组件的数据 this.$parent.xxx 就能调用父组件的方法 this.$parent.xxx ...
- vue父子组件之间的通信
利用props在子组件接受父组件传过来的值1.父组件parentComp.vue <template> <childComp :fromParentToChild="fro ...
- Vue父子组件之间通信
1.父 -> 子.通过props //father.vue <template> <div id="father"> <div><l ...
- vue父子组件之间相互传值
1. 子组件使用父组件方法,并向父组件传值 子组件代码 <template> <div class="menu"> <div class=" ...
随机推荐
- 解决PHP乱码
如果你的PHP页面出现了乱码,之需要在页面的开始处加入下面代码就可以了. <?php header("content-type:text/html;charset=utf-8" ...
- springboot +thymeleaf+myql 记录
thymeleaf官方文档: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.pdf demo案例:https://github. ...
- Mdoelsim10.4怎么脚本单独仿真ISE14.7 IP核
软件版本: Modelsim10.4SE ISE14.7 仿真IP:时钟管理IP(clock wizard) 流程: 1.对于Modelsim10.4SE,并不自带Xilinx家的仿真库,因此首先 ...
- 使用js获取页面参数
方法一 function GetUrlParam (name) { return decodeURIComponent((new RegExp('[?|&]' + name + '=' + ' ...
- Yii2.0 安装使用报错:yii\web\Request::cookieValidationKey must be configured with a secret key.
下载了Yii2.0的basic版,配置好apache之后,浏览器访问,出现如下错误: Invalid Configuration – yii\base\InvalidConfigException y ...
- Pandas系列(六)-时间序列详解
内容目录 1. 基础概述 2. 转换时间戳 3. 生成时间戳范围 4. DatetimeIndex 5. DateOffset对象 6. 与时间序列相关的方法 6.1 移动 6.2 频率转换 6.3 ...
- 迭代器模式-Iterator(Java实现)
迭代器模式-Iterator 用于访问一个集合中的各个元素, 而又不会暴露集合的内部的细节. 本文展示的例子就是, 在猫群组里, 用迭代器遍历每一只猫. 本文章的例子的继承关系图如下: 其中: Cat ...
- 微星X470主板装机
记录一下装机过程,以作纪念 配置 机箱:先马黑洞3 电源:先马金牌500w CPU:AMD 锐龙5:2600X 主板:微星 X470 暗黑版 显卡:七彩虹 RTX2060 内存:科赋 3200,2条8 ...
- DirectX11--深入理解HLSL常量缓冲区打包规则
HLSL常量缓冲区打包规则 DirectX11 With Windows SDK完整目录 欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报. 尽管打包规则并不 ...
- MySQL学习笔记(六)MySQL8.0 配置笔记
今天把数据库配置文件修改了,结果重启不了了 需要使用 mysqld --initialize 或 mysqld --initialize-insecure 命令来初始化数据库 1.mysqld --i ...