1. ホーム
  2. javascript

[解決済み] vue.jsの親メソッドから子メソッドにアクセスする方法

2022-06-29 07:31:34

質問

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

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

密結合が嫌な場合は イベントバス を使うことができます。以下は、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/