Vue父子组件通信(父级向子级传递数据、子级向父级传递数据、Vue父子组件存储到data数据的访问)

简介: Vue父子组件通信(父级向子级传递数据、子级向父级传递数据、Vue父子组件存储到data数据的访问)

Vue父子组件通信(父级向子级传递数据、子级向父级传递数据、Vue父子组件存储到data数据的访问)

 

一、父级向子级传递数据【Prop】:

Prop:子组件在自身标签上,使用自定义的属性来接收外界(也可以是父组件)的数据,然后将数据接收到prop中。【接收父组件的数据—动态Prop,需要v-bind绑定属性,数据可以从vue实例中获取


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>html暂时不支持驼峰写法</title>
</head>
<body>
<div id="app">
  <!--
   子组件要或者外界(例如也可以是父组件)的数据,它是需要在自身标签上,使用props中自定义的属性来接收,
   若是想接收的数据来自父组件【Vue实例】------通过绑定属性(数据可以从vue实例中获取)
  -->
  <!--静态的prop-->
  <cpn c-info="info"></cpn><br/>
  <!--动态prop-->
  <cpn :c-info="info"></cpn>
</div>
<template id="cpn">
  <div>
    <h1>cpn的内容</h1>
    <ul>
      <li v-for="item in cInfo">{{item}}</li>
    </ul>
  </div>
</template>
</body>
<script type="text/javascript" src="./js/vue.min.js"></script>
<script>
  const cpn = {
    template: `#cpn`,
    props:{
      cInfo: {
        type: Object,
        default(){
          return {}
        }
      }
    },
  }
  let app = new Vue({
    el: '#app',
    data: {
      message:'动态绑定属性v-bind',
      abc: {
        id: '1',
        name: '父类的info中的name',
        age: '1'
      },
      info: {
        id: '1',
        name: '父类的info中的name',
        age: '15'
      }
    },
    components: {
      cpn
    }
  });
</script>
</body>
</html>


二、子级向父级传递数据【emit】:

子组件通过$emit(‘自定义事件名’, 数据变量)向父组件发送消息,在子组件进行自定义的事件进行监听【监听调用的函数可以直接通过一个自定义的参数接收到数据变量


<!-- 父组件 -->
<div id="app">
  <!-- 子组件上监听到自定义的事件的同时,也监听到发送的数据num,事件指向的函数,通过自定义一个参数value可以直接拿到数据num  -->
  <cpn :c-info="info" @item-click="itemClick"></cpn>
</div>
<!-- 子组件的模板 -->
<template id="cpn">
  <div>
    <h1>子组件的模板</h1>
      <button v-for="item in cInfo"  @click="btnClick(item)">{{item}}</button>
  </div>
</template>
</body>
<script type="text/javascript" src="js/vue.min.js"></script>
<script>
  const cpn = {
    template: `#cpn`,
    data(){
      return{
        num: 99
      }
    },
    props:{
      cInfo: {
        type: Object,
        default(){
          return {}
        }
      }
    },
    methods: {
      btnClick(item){
        console.log('子组件接收到父组件传递的数据' + item);
        //$emit的第一个参数是自定义的事件名称和发送数据num
        this.$emit('item-click', this.num);
      }
    }
  }
  let app = new Vue({
    el: '#app',
    data: {
      info: {
        id: '1',
        name: 'yile',
        age: '15'
      }
    },
    methods: {
      itemClick(value){
        console.log('父组件监听到子组件发出的事件和接收到子组件的数据' + value);
      }
    },
    components: {
      cpn
    }
  });
</script>


三、Vue父子组件存储数据的访问:

(1)父组件访问子组件data中存储的数据:使用$children或 $refs  (注意:this.$children得到的是一个数组,包含所有子组件对象。)

(2)$refs的使用:

      ■ $refs和ref指令通常是一起使用的

      ■ 首先,我们通过ref给某一个子组件绑定一个特定的ID

      ■ 其次,通过this.$refs.ID就可以访问到该组件了


18.png



目录
相关文章
|
2天前
|
JavaScript 前端开发 API
管理数据必备;侦听器watch用法详解,vue2与vue3中watch的变化与差异
一篇文章同时搞定Vue2和Vue3的侦听器,是不是很棒?不要忘了Vue3中多了一个可选项watchEffect噢。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
2天前
|
存储 数据采集 供应链
属性描述符初探——Vue实现数据劫持的基础
属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
4月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
155 64
|
4月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
197 64
|
4月前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
4月前
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
4月前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
4月前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
4月前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。
|
4月前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
96 1

热门文章

最新文章