Я новичок в Vue и Vuex, так что терпите меня.
Я хочу, чтобы вычисляемая функция versions()
вызывалась при изменении state.template
, но я терплю неудачу сделать так. В частности, при изменении state.template.versions
.
Это часть компонента, который я хочу повторно визуализировать при изменении state.template.versions
. Вы также можете увидеть вычисленное свойство versions()
, которое я хочу назвать:
<el-dropdown-menu class="el-dropdown-menu--wide"
slot="dropdown">
<div v-for="version in versions"
:key="version.id">
...
</div>
</el-dropdown-menu>
...
computed: {
...mapState('documents', ['template', 'activeVersion']),
...mapGetters('documents', ['documentVersions', 'documentVersionById', 'documentFirstVersion']),
versions () {
return this.documentVersions.map(function (version) {
const v = {
id: version.id,
name: 'Draft Version',
effectiveDate: '',
status: 'Draft version',
}
return v
})
},
Это getter
:
documentVersions (state) {
return state.template ? state.template.versions : []
},
Это action
:
createProductionVersion (context, data) {
return new Promise((resolve, reject) => {
documentsService.createProductionVersion(data).then(result => {
context.state.template.versions.push(data) // <-- Here I'm changing state.template. I would expect versions() to be called
context.commit('template', context.state.template)
resolve(result)
})
Это mutation
:
template (state, template) {
state.template = template
},
Я читал, что в некоторых случаях Vue не обнаруживает ченеги, сделанные в массив, но .push()
вроде бы обнаружен. Источник: https://vuejs.org/v2/guide/list.html#Caveats
Есть идеи, почему вычисляемое свойство не вызывается при обновлении context.state.template.versions
?