算是初学vue,整理一下父子组件通信笔记。
父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息。
一、父组件向子组件下发数据:
1.在子组件中显式地用props选项声明它预期的数据;
Vue.component('child', { // 声明 props props: ['message'], // 就像 data 一样,prop 也可以在模板中使用 // 同样也可以在 vm 实例中通过 this.message 来使用 template: '<span>{{ message }}</span>' })
2.在父组件模板中通过子组件声明的props数据向子组件发数据;
// 此处通过message向子组件下发消息
<child message="hello!"></child>
二、子组件向父组件发送消息
1.父组件模板中使用 $on(eventName)
监听事件(注:不能用 $on
监听子组件释放的事件,而必须在模板里直接用 v-on
绑定);
2.子组件中使用$emit(eventName, optionalPayload)
触发事件
<div id="message-event-example" class="demo"> <p v-for="msg in messages">{{ msg }}</p> // 父组件模板中使用子组件,通过v-on监听子组件触发的事件 <button-message v-on:message="handleMessage"></button-message> </div> Vue.component('button-message', { template: `<div> <input type="text" v-model="message" /> <button v-on:click="handleSendMessage">Send</button> </div>`, data: function () { return { message: 'test message' } }, methods: { handleSendMessage: function () { // 使用$emit触发事件,传入载荷数据 this.$emit('message', { message: this.message }) } } }) new Vue({ el: '#message-event-example', data: { messages: [] }, methods: { handleMessage: function (payload) { // 使用载荷数据(payload) this.messages.push(payload.message) } } })
注:以上内容来源于Vue.js官方学习教程。初学vue,根据自己的理解整理,如有错误,欢迎交流纠正。