我有两个嵌套组件,从父级访问子方法的正确方式是什么?

this.$children[0].myMethod()似乎很管用,但它很难看,不是吗,还有什么更好的方法:

<script>
import child from './my-child'

export default {
  components: {
   child
  },
  mounted () {
    this.$children[0].myMethod()
  }
}
</script>

推荐答案

你可以用ref.

import ChildForm from './components/ChildForm'

new Vue({
  el: '#app',
  data: {
    item: {}
  },
  template: `
  <div>
     <ChildForm :item="item" ref="form" />
     <button type="submit" @click.prevent="submit">Post</button>
  </div>
  `,
  methods: {
    submit() {
      this.$refs.form.submit()
    }
  },
  components: { ChildForm },
})

如果你不喜欢紧耦合,可以使用Event Bus,如@Yosvel Quintero所示.下面是使用事件总线作为props 的另一个例子.

import ChildForm from './components/ChildForm'

new Vue({
  el: '#app',
  data: {
    item: {},
    bus: new Vue(),
  },
  template: `
  <div>
     <ChildForm :item="item" :bus="bus" ref="form" />
     <button type="submit" @click.prevent="submit">Post</button>
  </div>
  `,
  methods: {
    submit() {
      this.bus.$emit('submit')
    }
  },
  components: { ChildForm },
})

组件代码.

<template>
 ...
</template>

<script>
export default {
  name: 'NowForm',
  props: ['item', 'bus'],
  methods: {
    submit() {
        ...
    }
  },
  mounted() {
    this.bus.$on('submit', this.submit)
  },  
}
</script>

https://code.luasoftware.com/tutorials/vuejs/parent-call-child-component-method/

Vue.js相关问答推荐

Nuxt.js i18n不提供默认区域设置中的页面而不重定向

VueUse onClickOutside不支持右键单击

Vuetify快速失败不会阻止发送表单

写入计算值时出错,但我没有写入任何值

vue3 + pinia:如何从?store 中获取一个值

Vue 脚本标签中更漂亮的 destruct 功能

Nuxt 2.15.7 的构建错误 - 无法解析 CSS @font-face URL

更改 Vuetify 轮播高度

查找未销毁的 Vue 组件

Webpack 导入的模块不是函数

Vue.js 和观察者模式

无需直接 DOM 操作即可绘制d3-axis

Vue index.html favicon 问题

VueJS 将 HTML 打印到页面

v-on:submit.prevent 不停止表单提交

Vue 如何使用 slot 和 slot-props 测试组件

交换数组项

Vue CLI 3 sass-resources-loader - Options.loaders 未定义

如何使用vue.js/nuxt.js获取一个目录下的所有图片文件

Vue.js 单向绑定表单