问题描述
我试图将道具从Blade文件传递给Vuejs组件名称AppMessages
<app-messages :messages="{{ $messages }}"></app-messages>
然后根据selfOwned
布尔值呈现消息。
<app-message v-for="message in messages" :message="message" :key="message.id" v-if="message.selfOwned === false"></app-message>
<app-message-own v-for="message in messages" :message="message" :key="message.id" v-if="message.selfOwned === true"></app-message-own>
在子组件中,当由Bus事件创建时,我会传递一条消息
let tempBuitMessage = this.tempMessage()
Bus.$emit('message.added',tempBuitMessage);
在道具中定义this.messages
export default {
props: {
messages: {
required: true,type: Array
}
},
在父组件AppMessages
中,我设置了列表器
mounted() {
Bus.$on('message.added',data => {
this.messages.unshift(data)
console.log(this.messages)
});
},
问题:
我希望新传递的消息可以在聊天中找到,但是我可以在控制台中看到它(没有错误),但是没有呈现。
解决方法
您不能从组件内部操纵组件的道具。数据通过道具流到孩子,然后通过事件(而不是在谈论公共汽车)流到父母。
您应该能够使用计算所得的属性来获得反应性,或者只需将安装时的消息分配给data属性即可。
<template>
...
<app-message v-for="message in model" :message="message" :key="message.id" v-if="message.selfOwned === false"></app-message>
<app-message-own v-for="message in model" :message="message" :key="message.id" v-if="message.selfOwned === true"></app-message-own>
...
</template>
<script>
export default {
name: 'app-messages',props: {
messages: {
required: true,type: Array
}
},data() {
return {
model: null,};
},created() {
this.model = this.messages;
},mounted() {
Bus.$on('message.added',data => {
this.model.unshift(data)
console.log(this.messages)
});
},}
</script>