vuejsを学びたい$ emitを使用して、@clickを使用せずに、あるコンポーネントのデータをすべてに渡す方法について質問がありました。 データをちょうど利用できるようにして、クリックを使わずにいつでもそれをつかむことができますか?
この例では、通常の@clickと$ emitを使用しています。
main.js
export const eventBus = new Vue()
Hello.vue
<template>
<div>
<h2>This is Hello component</h2>
<button
@click="emitGlobalClickEvent()">Click me</button>
</div>
</template>
<script>
import { eventBus } from '../main'
export default {
data() {
return {
msg: 'Welcome to Your Vue.js App'
}
},
methods: {
emitGlobalClickEvent() {
eventBus.$emit('messageSelected', this.msg)
}
}
}
</script>
User.vue
<template>
<div>
<h2>This is User component</h2>
<user-one></user-one>
</div>
</template>
<script>
import { eventBus } from '../main'
import UserOne from './UserOne.vue'
export default {
created() {
eventBus.$on('messageSelected', msg => {
console.log(msg)
})
},
components: {
UserOne
}
}
</script>
UserOne.vue
<template>
<div>
<h3>We are in UserOne component</h3>
</div>
</template>
<script>
import { eventBus } from '../main'
export default {
created() {
eventBus.$on('messageSelected', msg => {
console.log('From UserOne message !!!')
})
}
}
</script>
私はこのメッセージを受け取りたいと思います:すべてのコンポーネントでHello.vueのVue.js Appへようこそ。ただし、@clickがない場合は可能です。
子どもがデータを利用できるようにする通常の方法は、[props](https://vuejs.org/v2/guide/components.html#Passing-Data-with-Props) –
経由で行います。ちょうどVuexを使用してください。データを持つvuexストアを作成し、それをvueインスタンスおよびすべてのコンポーネントに挿入して、これらのデータをこのように読み取ることができます。$ store - もうプロップは必要ありません。 – WaldemarIce