Я использую квазар-фреймворк и vuex для своего приложения.Родительский компонент рендерит дочерние компоненты с данными из хранилища vuex.Дочерний компонент является contenteditable, и если я нажимаю на нем клавишу ввода, магазин обновляется.Но вычисляемое свойство в родительском компоненте не обновляется.Вот мой код:
parent-component.vue
<template>
<div>
<div v-for="(object, objKey) in objects"
:key="objKey">
<new-comp
:is=object.type
:objId="object.id"
></new-comp>
</div>
</div>
</template>
<script>
import ChildComponent from './child-component';
export default {
name: 'ParentComponent',
components: {
ChildComponent
},
computed : {
objects(){
return this.$store.state.objects.objects;
}
},
mounted() {
this.assignEnterKey();
},
methods: {
assignEnterKey() {
window.addEventListener('keydown',function(e) {
if(e.which === 13) {
e.preventDefault();
}
});
}
}
}
child-component.vue
<template>
<div contenteditable="true" @keydown.enter="addChildComp" class="child-container">
Tell your story
</div>
</template>
<script>
export default {
name: 'ChildComponent',
props: ['objId'],
data() {
return {
id: null
}
},
computed : {
serial(){
return this.$store.state.objects.serial;
}
},
methods: {
addChildComp() {
let newId = this.objId + 1;
let newSerial = this.serial + 1;
this.$store.commit('objects/updateObjs', {id: newId, serial: newSerial});
}
}
}
state.js
export default {
serial: 1,
objects: {
1:
{
"id" : 1,
"type" : "ChildComponent",
"content" : ""
}
}
}
mutation.js
export const updateObjs = (state, payload) => {
let id = payload.id;
let serial = payload.serial;
state.objects[serial] = {
"id" : id ,
"type" : "ChildComponent",
"content" : ""
};
}