vue.js - 如何订阅具有多个模块的商店的突变更改?
问题描述
使用vue.js构建登录页面。在我的项目中,我将我的商店分为两个模块(用户、信息)。
在 User 模块中,actions.js
旨在处理一些异步请求(如登录、注册),并提交相应的变异。
export const userActions = {
login({commit}, loginUser) {
commit(LOGIN)
axios.post(`${ API_BASE_USER }/login`, loginUser)
.then(res => {
const { token } = res.data
if (res.status == 200) { commit(LOGIN_SUCCESS, token) }
else { commit(LOGIN_FAILURE, res.data) }
})
}
.......
}
我知道:在 Vuex 中,我们可以订阅存储突变。
我想订阅每个突变更改,Login.vue
以便我可以加载通知来告诉用户登录是否成功。
Login.vue
created () {
this.$store.subscribe(mutation => {
switch (mutation.type) {
case LOGIN_SUCCESS:
console.log('view success')
// load success nitification
break
case LOGIN_FAILURE:
console.log('view failure')
// load success nitification
break
case LOGIN_WARNING:
console.log('view warning')
break
}
})
}
但这似乎行不通。是否不可能在具有多个模块的商店中订阅特定模块的突变?
解决方案
由于您使用存储模块的名称空间,因此在订阅时需要考虑它。例如:
created () {
this.$store.subscribe(mutation => {
switch (mutation.type) {
case MODULE_NAME + '/' + LOGIN_SUCCESS:
console.log('view success')
// load success nitification
break
...
}
})
}
推荐阅读
- node.js - 赫罗库 | 不能获取
- concurrency - ConcurrentHashMap::computeIfAbsent 是每个键还是每个 ConcurrentHashMap 的原子?
- firebase - 如何在 Firebase 中使用私人帐户实现追随者系统?
- python - 如何使用 for 循环简化 lst = [ x**2 for x in [x**2 for x in range(11)]] 此代码
- c++ - Win32 api中的画笔
- java - androidx.appcompat.widget.AppCompatEditText 错误
- javascript - Dropbox API Javascript - uploadFile() 导致 400 错误请求
- sql - 谈 ANSI SQL 时,JOIN 和 LEFT JOIN 有区别吗?
- r - 闪亮的应用程序错误无法将类型“环境”强制转换为“字符”类型的向量
- scala - 如何告诉 scalac 抑制警告是宏生成的代码?