vue.jsで親から子メソッドにアクセスする方法 質問する

vue.jsで親から子メソッドにアクセスする方法 質問する

ネストされたコンポーネントが 2 つあります。親から子のメソッドにアクセスする適切な方法は何ですか?

this.$children[0].myMethod()うまくいくようですが、かなり醜いですね。もっと良い方法は何でしょうか。

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

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

ベストアンサー1

使用できます参照

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 },
})

密結合が嫌いな場合は、イベントバス@Yosvel Quintero が示したとおりです。以下は、バスをプロパティとして渡すことでイベント バスを使用する別の例です。

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/

おすすめ記事