Vue子组件向父组件通信,父组件向子组件通信

首先,子组件代码如下

<template>
  <div style="border:1px solid black;width:400px;">
    <h3>我是子组件里的</h3>
    <button>点击按钮子组件传递父组件</button>
    <div>我是父组件传子组件显示的:我还没有值</div>
  </div>
</template>
<script>
export default {
  data() {
    return {};
  },
  components: {},
  methods: {}
};
</script>

父组件代码如下

<template>
  <div style="border:1px solid red;padding:2rem;width:500px;margin:50px auto;">
    <h3>我是父组件里的</h3>
    <div>我是子组件向父组件传递的:我还没有值</div>
    <MyChild></MyChild>
  </div>
</template>
<script>
export default {
  data() {
    return {};
  },
  components: {},
  methods: {}
};
</script>

网页显示如图:

网页显示可以清晰的看出来父子组件的结构,父组件包裹着子组件。

首先,我们先让父组件向子组件通信吧。实现方法是在子组件通过props来接受父组件传过来的值。我们在父组件定义了一个名为data的值,在子组件标签里bind动态绑定了这个值,如下图所示

先定义变量

修改MyChild标签内容

接着在子组件里通过props来接收,如下图

这样子组件就接收到了父组件传递过来的值了,我们通过修改以下代码来看看这个值到底有没有接收到

可以看到,我们父向子通信已经实现了,接下来就是子向父通信了,这个就要使用到this.$emit方法了。通过this.$emit("")来自定义事件,然后在父组件中监听事件。

在子组件中给button按钮click事件,来通过this.$emit自定义事件,并传入一个参数,具体修改代码如图:

在父组件中的子组件标签里,先在data里定义一个变量接收这个值,监听自定义事件,并接受这个参数赋值给定义的变量,修改代码如图:

再添加一个变量

然后再修改MyChild标签

再在父组件的div里显示,代码如下:

现在进入到浏览器中,点击子传父的按钮,结果出来了,下图展示整个运行结果

由此子向父,父向子通信就都完成了。

讲的可能有些乱,附上完整代码就好多了:

Home.vue

<template>
  <div style="border:1px solid red;padding:2rem;width:500px;margin:50px auto;">
    <h3>我是父组件里的</h3>
    <div>我是子组件向父组件传递的:{{childData}}</div>
    <MyChild :fromFather="data" @ListenerChild="(data)=>this.childData = data"></MyChild>
  </div>
</template>

<script>
import MyChild from "./Child";
export default {
  data() {
    return {
      data: "I am your father",
      childData: ""
    };
  },
  components: {
    MyChild
  },
  methods: {}
};
</script>
Child.vue

<template>
  <div style="border:1px solid black;width:400px;">
    <h3>我是子组件里的</h3>
    <button @click="()=>this.$emit(‘ListenerChild‘, ‘I am your child‘)">点击按钮子组件传递父组件</button>
    <div>我是父组件传子组件显示的:{{fromFather}}</div>
  </div>
</template>

<script>
export default {
  props: ["fromFather"],
  data() {
    return {};
  },
  components: {},
  methods: {}
};
</script>

原文地址:https://www.cnblogs.com/gehaoyu/p/11984807.html

时间: 2024-07-29 14:23:30

Vue子组件向父组件通信,父组件向子组件通信的相关文章

【前端小小白的学习之路】vue学习记录⑤(组件通信-父与子)

今天我们看一下组件通信. 经过前面几篇文章,我们已经可以构建出完整的单个组件,并利用路由使其串联起来访问了. 但这明显还是不够的.一个页面不可能就是个单组件,一般是由多个组件合成的.正因为如此,组件之间肯定是有相互关系的,我们就称这种现象叫组件通信. 比如父组件发生了某项改变,子组件会跟着相应发生变化:反过来,子组件有了某种改变,父组件有时也会随之做出调整.那么这种现象我们称之为双向数据流动. 然而,vue的作者敏锐的认识到,双向数据流带来便捷的同时,也存在着极大的安全隐患. 父组件将变化传递给

Vue组件间的通信--父传子

属性传值,子组件props 接收 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="app"> <parent></parent> </div> <script src="j

【vue组件之间互相传值:父传子,子传父】

今看到一篇很不错的vue组件传值文章,便于理解,遂做笔记- 一般页面的视图App.vue应为这样 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Child.vue2.Child.vue的中创建props,然后创建一个名为message的属性 3.在App.vue中注册Child组件,并在template中加入child标签,标签中添加message属性并赋值 4.保存修改的文件,查看浏览器 5.我们依然可以对message的值进行v-bind动态绑定 此

Vue的父子组件v-model双向绑定,父组件修改子组件中绑定的v-model属性

先来看下实现的效果,父组件中有个文本框,在点击下面按钮时弹出抽屉,抽屉里也有个文本框,文本框里的初始值要和父组件的文本框同步,并且修改抽屉里的文本框值时 父组件里的文本框值也要跟着改变 网上有大概三种方法 父组件调用子组件传值,子组件通过props接收父组件传来的值,并通过emit发送方法名和值,父组件根据传来的方法名定义方法接收值并进行赋值操作. Sync  这个没试过不了解 v-model  子传父: 父组件定义v-model,子组件中当数据更新时,向父组件emit一个input事件,将更新

父组件接收子组件事件的参数===子组件给父组件传值===子组件调用(绑定)父组件的方法

子组件调用(绑定)父组件的方法===父组件接收子组件事件的参数===子组件给父组件传值 就相当于父组件给子组件传递了一个方法,子组件触发这个方法,也就相当于父组件调用了这个方法 可以说是互相影响,数据双向绑定 子组件 <div @click="clickCell(参数)"> props:{ clickCell:{ type:Function, default: function(){} } } 父组件 <子组件名 :clickCell="dealClickC

VUE实现Studio管理后台(五):手风琴式折叠组件(Accordion)

作为一个有目标的人(目标是做一个好用的Bootstrap可视化编辑器,第一个版本已经实现,演示地址:https://vular.cn/rxeditor/,代码地址:https://github.com/vularsoft/rxeditor),工作比较积极,思维也比较活跃,睡眠相对较少.今早6:30就起床了,吃早饭前,实现了一个手风琴式折叠组件,具体效果如下: 一般情况,这样的控件有两种表现形式: 1.排他展开,也就是一次只有一个项目展开,其它闭合,类似QQ的好友分组. 2.随意展开,不拍它,可以

自己收藏-javascript用window.open的子窗口关闭自己并且刷新父窗口

function closeMeAndReloadParent() { opener.location.reload(); window.close(); } 一种在父窗口中得知window.open()出的子窗口关闭事件的方法 <HTML><BODY><P> </P><form name=fm_Info><input type=text name=txtValue></form><script language=j

iframe子页面内刷新父页面中另一个iframe子页面

框架页面如下: <div id="aa" style="float: left; height: 500px; border-right-style: solid; border-right-color: #CCCCFF; border-right-width: 2px;"> <IFRAME id="tree" name="tree" src="/ScienProjectWeb/commonjsp/

JS 用window.open()函数,父级页面如何取到子级页面的返回值?

父窗口:<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="../js/jquery-1.7.2.min.js" type="text/javascript"></script> <script type=&quo

每次调用fork()函数之后,父线程和创建出的子线程都是从fork()后开始执行

Linux下多少个"-"将被打印: 1 2 3 4 5 6 7 8 int main(void){   int i;   for(i=0;i<4;i++){   fork();   printf("-\n");  }  return 0; } i=0时,主进程和其创建的子进程分别打印'-',  打印2个 i=1时,之前两个进程打印'-', 每个进程又创建新的子进程, 共打印4个'-' i=2时,之前的四个进程分别打印'-', 并创建新的子进程, 故共打印8个'