加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、容器安全、数据加密、云日志、云数据迁移!
当前位置: 首页 > 教程 > 正文

vue上父组件和子组件怎么通讯

发布时间:2023-08-31 11:30:22 所属栏目:教程 来源:互联网
导读:   这篇文章主要介绍“vue中父组件和子组件怎么通讯”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue中父组件和子组件怎么
  这篇文章主要介绍“vue中父组件和子组件怎么通讯”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue中父组件和子组件怎么通讯”文章能帮助大家解决问题。
 
  一、单向数据流
 
  在 Vue.js 中,父组件向子组件传递数据一般采用单向数据流的方式,即父组件通过 props 属性向子组件传递数据,而子组件不能直接修改这些数据。
 
  父组件通过在子组件上定义 props 属性来传递数据,如下所示:
 
  <template>
 
    <div>
 
      <!-- 父组件向子组件传递 count 数据 -->
 
      <child-component :count="count"></child-component>
 
    </div>
 
  </template>
 
  <script>
 
  import ChildComponent from './ChildComponent.vue'
 
  export default {
 
    components: {
 
      ChildComponent
 
    },
 
    data () {
 
      return {
 
        count: 0
 
      }
 
    }
 
  }
 
  </script>
 
  在子组件中通过 props 来接收父组件传递的数据,如下所示:
 
  <template>
 
    <div>
 
      <!-- 子组件通过 props 接收 count 数据 -->
 
      <div>count: {{ count }}</div>
 
    </div>
 
  </template>
 
  <script>
 
  export default {
 
    props: {
 
      count: {
 
        type: Number,
 
        default: 0
 
      }
 
    }
 
  }
 
  </script>
 
  这样就完成了父组件向子组件传递数据的过程,子组件可以使用接收到的数据进行渲染操作,但是不能直接修改这些数据。
 
  二、子组件向父组件传递数据
 
  在 Vue.js 中,子组件向父组件传递数据需要通过自定义事件的方式来实现。子组件通过 $emit 方法触发事件,父组件则通过在子组件上添加 v-on 指令绑定事件进行监听。
 
  例如,子组件中定义一个按钮,点击按钮时触发事件并通过 $emit 方法向父组件传递数据,如下所示:
 
  <template>
 
    <div>
 
      <button @click="sendData">传递数据</button>
 
    </div>
 
  </template>
 
  <script>
 
  export default {
 
    methods: {
 
      sendData () {
 
        // 通过 $emit 方法触发事件,并传递数据
 
        this.$emit('send-data', '这是子组件传递的数据')
 
      }
 
    }
 
  }
 
  </script>
 
  在父组件中,使用 v-on 指令绑定事件,监听子组件触发的事件,并接收子组件传递的数据,如下所示:
 
  <template>
 
    <div>
 
      <!-- 绑定子组件事件,监听子组件触发的事件 -->
 
      <child-component @send-data="getData"></child-component>
 
    </div>
 
  </template>
 
  <script>
 
  import ChildComponent from './ChildComponent.vue'
 
  export default {
 
    components: {
 
      ChildComponent
 
    },
 
    methods: {
 
      getData (msg) {
 
        console.log(msg) // 打印子组件传递的数据
 
      }
 
    }
 
  }
 
  </script>
 
  这样就完成了子组件向父组件传递数据的过程,子组件通过 $emit 方法触发事件并传递数据,父组件则通过 v-on 指令绑定事件进行监听并接收子组件传递的数据。
 
  三、使用 $parent 和 $children 属性
 
  除了以上两种方式之外,Vue.js 还提供了 $parent 和 $children 两个属性来实现父子组件之间的通讯。使用 $parent 属性可以在子组件中访问父组件的数据和方法,使用 $children 属性可以在父组件中访问子组件的数据和方法。
 
  例如,在子组件中访问父组件的数据和方法,如下所示:
 
  <template>
 
    <div>
 
      <button @click="getParentData">获取父组件的数据</button>
 
    </div>
 
  </template>
 
  <script>
 
  export default {
 
    methods: {
 
      getParentData () {
 
        // 使用 $parent 属性访问父组件的数据和方法
 
        console.log(this.$parent.count) // 访问父组件的 count 数据
 
        this.$parent.sayHello() // 调用父组件的 sayHello 方法
 
      }
 
    }
 
  }
 
  </script>
 
  在父组件中访问子组件的数据和方法,则可以使用 $children 属性,如下所示:
 
  <template>
 
    <div>
 
      <button @click="getChildData">获取子组件的数据</button>
 
    </div>
 
  </template>
 
  <script>
 
  import ChildComponent from './ChildComponent.vue'
 
  export default {
 
    components: {
 
      ChildComponent
 
    },
 
    methods: {
 
      getChildData () {
 
        // 使用 $children 属性访问子组件的数据和方法
 
        console.log(this.$children[0].count) // 访问第一个子组件的 count 数据
 
        this.$children[0].sayHello() // 调用第一个子组件的 sayHello 方法
 
      }
 
    }
 
  }
 
  </script>
 
  不过,使用 $parent 和 $children 属性进行父子组件之间的通讯,不太符合 Vue.js 的组件通讯原则,不建议经常使用。因为这种方式会让子组件和父组件紧密耦合,使得代码的扩展和维护变得困难。
 

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章