【发布时间】:2018-10-08 11:02:59
【问题描述】:
我正在尝试在包含按钮、部分、标签等所有文本的字典中等待某些字符串。
我首先将默认字符串列表发送到控制器,该控制器将所有字符串注册到我的 CMS,以防这些特定值不存在。之后,我返回一个包含我的“字典”的新对象,但具有当前语言的正确值。
我使用在window.onload 上触发dispatch() 的事件侦听器运行调用,然后将数据添加到Vuex 模块状态。然后我将它添加到计算的道具中。
computed: {
cartDictionary() {
return this.$store.state.dictionaries.myDictionaries['cart']
}
}
所以现在的问题是:在我的模板中,我尝试从 cartDictionaryprop 获取值,这是一个数组。
<h2 class="checkout-section__header" v-html="cartDictionary['Cart.Heading']"></h2>
但是当组件渲染时,prop 还没有值,因为它正在等待 AJAX 调用完成。所以我当然会收到cannot read property of undefined 错误。
关于如何解决这个问题的任何想法?我希望通过全局对象访问字典,而不是通过 props 传递所有内容,因为它是使用原子设计构建的,而且会非常乏味。
编辑: 添加更多代码以进行澄清。
我的模块:
const dictionaryModule = {
namespaced: true,
state: {
dictionaries: []
},
mutations: {
setDictionaries (state, payload) {
state.dictionaries = payload
}
},
actions: {
getDictionaries ({commit}) {
return new Promise((resolve, reject) => {
Dictionaries.init().then(response => {
commit('setDictionaries', response)
resolve(response)
})
})
}
}
}
我的商店:
const store = new Vuex.Store({
modules: {
cart: cartModule,
search: searchModule,
checkout: checkoutModule,
filter: filterModule,
product: productModule,
dictionaries: dictionaryModule
}
})
window.addEventListener('load', function () {
store.dispatch('dictionaries/getDictionaries')
})
【问题讨论】:
-
你能在父子组件中显示你的数据对象吗?
-
@boussadjrabrahim 我所展示的都在同一个组件中,它也是父组件。这是一个混合 Vue/MVC 解决方案,因此“结帐”组件被插入到 Razor 视图中的元素中。
-
所以请提供我通过 ajax 调用完成的最终对象的结构