【发布时间】:2018-08-04 17:35:16
【问题描述】:
我目前正试图显示一个表单来编辑现有网站。
我的问题是一个站点有大约 60 个输入字段,并且为每个输入编写 setter 和 getter 似乎不是一个好方法。
所以我能想到的最好的办法是将我的商店数据保存到一个局部变量中,编辑该局部变量并将其发回。
Edit.vue
<b-form-input id="currentSiteName" v-model="this.editSite.title"></b-form-input>
...
computed: {
editSite() {
return this.$store.state.currentSite
}
},
mounted: function() {
this.$store.dispatch('SHOW_SITE', {
siteId: this.$route.params.id
});
},
商店操作
SHOW_SITE: function ({ commit }, siteParams) {
http.get('/sites/' + siteParams.siteId).then((response) => {
commit('SHOW_SITE', {
site: response.data.foundSite
});
},
(err) => {
// eslint-disable-next-line
console.log(err);
})
},
存储突变
SHOW_SITE: (state, { site }) => {
state.currentSite = site;
},
如果我查看我的 vue-dev-tools,我可以看到 editSite 具有正确的值,并且这些值都显示在表单中,但出现以下两个错误:
Error in event handler for "input": "TypeError: Cannot read property 'editSite' of null"
Cannot read property 'editSite' of null at callback
我在这里做错了什么还是有更好的 /c 方法来解决我的问题?
任何帮助将不胜感激!
【问题讨论】:
-
好吧,阅读您的代码,我相信您的
editSite问题与vuex 完全无关。我认为您应该设置v-model="editSite.title"而不使用this引用,以消除那个确切的错误。这并不意味着您的程序看起来是正确的。我不确定当您为计算属性设置v-model时会发生什么,但恐怕这没什么好。
标签: javascript vue.js vuex