父子间组件通信

这篇具有很好参考价值的文章主要介绍了父子间组件通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、父传子( 定义:父传子使用的是 props )

① 首先确定父组件和子组件,然后在父组件中引入子组件,注册并使用;

父组件代码如下:

<template>
  <div>
    <h1>父组件</h1>
    <!-- 使用子组件 -->
    <ChildView></ChildView>
  </div>
</template>
<script>
// 引入子组件
import ChildView from "../components/child/child1.vue";
export default {
  name: "FatherView",
  components: {
    // 注册子组件
    ChildView,
  }
};
</script>

子组件代码如下:

<template>
  <div>
    <h1>子组件</h1>
  </div>
</template>
<script>
export default {
  name: "ChildView",
  components: {},
};
</script>

② 然后在父组件的data里面定义需要传递给子组件的数据以及methods里面的自定义事件;

//传递的数据
data() {
    return {
      list: [1, 2, 3, 4, 5],
      title: "wanjie",
      age: 22,
      sex: 1,
    };
  },
  methods: {
    // 自定义事件
    myHander(v) {
      console.log("myHander", v);
    },
  },

③ 通过给子组件标签上自定义数据和事件进行输送;

 <!-- props绑定的属性和事件 -->
    <ChildView
      :title="title"
      :list="list"
      :age="age"
      :sex="sex"
      @myHander="myHander"
    ></ChildView>

④ 子组件接受数据需要在script中定义一个与data平级的props,在props数组的内部来进行接收;

  //声明props
  //这里的两个值需要和父组件传过来的值相同,否则就会报错
  props: ["title", "list"],
  data() {
    return {};
  },

 ⑤ 子组件在页面上显示,直接this.属性名就可以获取到;

  <p>{{ this.title }}</p>

⑥ 如果没有在子组件的props里面声明接收,可以使用 $attrs 获取到传递的数据、$listeners 获取自定义事件;

console.log("child", this.list);    //输出结果为:child [1, 2, 3, 4, 5]
console.log("其他没有声明的props在:", this.$attrs);      //输出结果为:其他没有声明的props在: {age: 22, sex: 1}
console.log("没有使用的事件:event", this.$listeners);   //输出结果为:没有使用的事件:event {myHander: ƒ}

完整父组件代码如下:

<template>
  <div>
    <h1>父组件</h1>
    <!-- 使用子组件 -->
    <!-- props绑定的属性和事件 -->
    <ChildView
      :title="title"
      :list="list"
      :age="age"
      :sex="sex"
      @myHander="myHander"
    ></ChildView>
  </div>
</template>
<script>
// 引入子组件
import ChildView from "../components/child/child1.vue";
export default {
  name: "FatherView",
  components: {
    // 注册子组件
    ChildView,
  },
  mixins: [],
  props: {},
  data() {
    return {
      list: [1, 2, 3, 4, 5],
      title: "wanjie",
      age: 22,
      sex: 1,
    };
  },
  methods: {
    // 自定义事件
    myHander(v) {
      console.log("myHander", v);
    },
  },
};
</script>

完整子组件代码如下:

<template>
  <div>
    <h1>子组件</h1>
    <p>{{ this.title }}</p>
    <button type="button" @click="fn">父传子</button>
  </div>
</template>
<script>
export default {
  name: "ChildView",
  components: {
  },
  mixins: [],
  //声明props
  //这里的两个值需要和父组件传过来的值相同,否则就会报错
  props: ["title", "list"],
  data() {
    return {};
  },
  mounted() {
    // 打印测试
    console.log("child", this.title); //child wanjie
    console.log("child", this.list); //child [1, 2, 3, 4, 5]
    console.log("其他没有声明的props在:", this.$attrs); //其他没有声明的props在: {age: 22, sex: 1}
    console.log("没有使用的事件:event", this.$listeners); //没有使用的事件:event {myHander: ƒ}
  },
  methods: {
    fn() {
      this.$emit("myHander", 123);  
    },
  },
};
</script>

2、子传父( 定义:父传子使用的是 emit )

① 首先确定父组件和子组件,然后在父组件中引入子组件,注册并使用;

② 然后在子组件的data里面定义需要传递给父组件的数据以及methods里面的自定义事件;

③ 在子组件里面定义一个方法传值 $emit ("第一个参数为自定义方法名",第二个参数为需要传递的值);

  methods: {
    fn() {
      this.$emit("pass", this.name);
    },
  },

父组件代码如下:

<template>
  <div>
    <h1>父组件</h1>
    <!-- 使用子组件 -->
    <AboutList></AboutList>
  </div>
</template>
<script>
// 引入子组件
import AboutList from "../components/children/AboutList";
export default {
  name: "AboutView",
  // 注册引入的子组件
  components: {
    AboutList,
  },
  data() {
    return {};
  },
  methods: {},
};
</script>

子组件代码如下:

<template>
  <div>
    <h2>子组件</h2>
    <button type="button" @click="fn">子传父</button>
  </div>
</template>
<script>
export default {
  name: "AboutList",
  components: {},
  data() {
    return {
   // 传递给父组件的值
      list: [1, 2, 3, 4, 5],
      name: "wj",
      sex: 12,
    };
  },
  methods: {
   // 自定义事件
    fn() {
      this.$emit("pass", this.name);
    },
  },
};
</script>

④ 在父组件定义一个自定义事件接收子组件传递过来的事件、data里面定义一个来接收数据;

 data() {
    return {
      dataList: [],
    };
  },
  methods: {
    getList(val) {
      this.dataList = val;
      console.log("子组件传递回来的数据", this.dataList);
    },
  },

注意:自定义事件的等于号前面@pass需和子组件自定义方法名一样;等于号后面为父组件自定义方法名,需和下方的方法名对应。

子组件代码:

  methods: {
    fn() {
      this.$emit("pass", this.name);
    },
  },

父组件代码:

 <AboutList @pass="getList"></AboutList>

 // 接收自定义事件
 methods: {
    getList(val) {
      this.dataList = val;
      console.log("子组件传递回来的数据", this.dataList);
    },
  },

完整的父组件代码如下:

<template>
  <div>
    <h1>父组件</h1>
    <!-- 使用子组件 -->
    <AboutList @pass="getList"></AboutList>
    <p>name:{{ dataList }}</p>
  </div>
</template>
<script>
// 引入子组件
import AboutList from "../components/children/AboutList";
export default {
  name: "AboutView",
  // 注册引入的子组件
  components: {
    AboutList,
  },
  data() {
    return {
      dataList: [],
    };
  },
  methods: {
    getList(val) {
      this.dataList = val;
      console.log("子组件传递回来的数据", this.dataList);  //输出结果为:子组件传递回来的数据 wj
    },
  },
};
</script>

完整的子组件代码如下:

<template>
  <div>
    <h2>子组件</h2>
    <button type="button" @click="fn">子传父</button>
  </div>
</template>
<script>
export default {
  name: "AboutList",
  components: {},
  data() {
    return {
      list: [1, 2, 3, 4, 5],
      name: "wj",
      sex: 12,
    };
  },
  methods: {
    fn() {
      this.$emit("pass", this.name);
    },
  },
};
</script>

 文章来源地址https://www.toymoban.com/news/detail-623595.html

到了这里,关于父子间组件通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值)

    父组件:父组件引入子组件时,通过 child :parentValue = \\\"parentValue\\\"/child 子组件传值。 备注:这种方式父传值很方便,但是传递给后代组件不推荐(父-子-孙),且这种方式父组件不能直接修改父组件传过来的数据。 子组件:子组件通过props即 props:{ parentValue:{ type:String, default:\\\"\\\" } } 来

    2024年02月05日
    浏览(33)
  • vue3组合式api <script setup> props 父子组件的写法

    父组件传入子组个的变量, 子组件是无法直接修改的, 只能通过 emit的方式, 让父组件修改, 之后子组件更新 父组件的写法没有变, 子组件的写法就有很大的变化了

    2024年02月10日
    浏览(33)
  • Vue、React和小程序中的组件通信:父传子和子传父的应用

    组件化开发是将一个大型应用程序拆分成独立的、可重用的、可组合的模块,使得开发人员可以快速构建和开发应用程序。组件化开发提倡将应用程序的各个功能模块分离开发,每个模块完成自己的功能并且可以在不同的应用程序中被复用。这可以提高代码的可维护性、可测

    2024年02月07日
    浏览(40)
  • Vue组件通信——父子组件通信的四种方法

    全局引入 在main.js文件中引入并注册 之后就可以全局使用组件了 局部引入 在父组件中引入 之后就可以在父组件中使用组件了 在子组件 prop 中可以注册一些自定义组件属性,父组件调用子组件时可以向 prop 中的自定义属性传值。 子组件代码: 父组件代码 prop 也可以通过 v-

    2023年04月16日
    浏览(80)
  • react 组件之间的通信(父子组件)

    React中 组件内调用其他组件不需要进行 类似于vue 声明组件(components) React 组件内调用其他组件 直接将组件导入 放置在对应的JSX 代码中 父子组件通信(传统): 1、父组件-子组件  通过属性传递 2、子组件-父组件  父组件通过将自身的函数对象传递给子组件, 子组件执行父组件

    2024年02月08日
    浏览(34)
  • VUE--组件通信(非父子)

    一、非父子通信  ---  event bus 事件总线         作用:非父子组件之间进行 简易的消息传递         步骤:                    1、创建一个都能访问到的事件总线(空vue实例)--- utils/EventBus.js                   2、 接收方(A组件),监听Bus实例的事件        

    2024年01月19日
    浏览(47)
  • Vue中父子组件通信

    聚沙成塔·每天进步一点点 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏!创建这个专栏的初衷是为了帮助大家更好地应对 Vue.js 技能树的学习。每篇文章都致力于提供清晰、深入的参考资料,让你能够更轻松、更自信地理解和掌握 Vue.js 的核心概念和技术。订

    2024年01月21日
    浏览(51)
  • react父子组件通信

    父传子:最常见 把父组件中的数据传给子组件 子传父:子组件调用父组件传递过来的参数,并且把想要传递的数据当成函数的实参传入即可 【子组件通过调用父组件传递到子组件的方法向父组件传递数据】 对于子传父中子组件还是先调用了父组件传递过来的参数,之后再向

    2024年02月07日
    浏览(29)
  • 父子间组件通信

    ① 首先确定父组件和子组件,然后在父组件中引入子组件,注册并使用; 父组件代码如下: 子组件代码如下: ② 然后在父组件的data里面定义需要传递给子组件的数据以及methods里面的自定义事件; ③ 通过给子组件标签上自定义数据和事件进行输送; ④ 子组件接受数据需

    2024年02月14日
    浏览(28)
  • VUE 父子组件、兄弟组件 之间通信 最强详解

    目录 1. 父组件 调用 子组件 内参数/方法 1.1 通过 ref 调用/获取 子组件内参数/方法 2. 子组件 调用 父组件 内参数/方法 2.1 通过 emit 调用 父组件方法 2.2 通过 props 调用 父组件方法/参数 2.3 通过 this.$parent 调用 父组件方法/参数 3. 兄弟组件 通信 3.1 通过 bus 进行 兄弟组件 通信

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包