[英]ngRx Store - Reducer returns undefined - store.select() is undefined
[英]Public get returns a permission boolean from auth service, which is initialized to false and modified when NGRX store returns a value but is UNDEFINED
我有一个Angular7应用程序,我选择根据定义为以下内容的布尔值在app.component中显示一个按钮:
get superUser(): boolean {
return this.auth.userPermissions.SUPER_USER;
}
现在,在我的身份验证服务中,我在Permissions模型之后初始化了userPermissions,并将所有权限标记为'false'。
permissions: Permissions = {
SUPER_USER: false,
CLIENT_ADMIN: true,
ADD_CLIENT: false,
ADD_USER: false,
DELETE_CLIENT: false,
DELETE_USER: false,
READ_ALL_CLIENTS: false,
READ_ALL_USERS: false,
READ_REPORTS: false,
READ_USERS: false,
UPDATE_CLIENT: false
};
public get userPermissions(): Permissions {
return this.permissions;
}
在Authentication上,将权限数组发送到reducer,并使用ngrx store设置权限。
.subscribe((token: string) => {
Cookie.set('access_token', token);
this.store.dispatch(new UserActions.SetUser(this.currentUser));
const currentUser = this.helper.decodeToken(token);
this.store.dispatch(
new PermissionsActions.SetPermissions(currentUser.permissions)
);
return this.router.navigate(['']);
});
在该服务中,我正在订阅该存储值并更新权限对象。
this.permissionSubscription = this.store
.select('permissions')
.subscribe(permissions => {
this.permissions = permissions;
});
现在的麻烦是,认证之后的第一次,整个事情崩溃了:
Cannot read property 'SUPER_USER' of undefined
引用定义吸气剂的那一行。
但是到处都有定义。 我的代码中没有一个地方,我尚未初始化并使用默认值“ false”定义了模型变量。
在我的reducer中处理权限数组:
const keys: string[] = Object.keys(state);
for (const permission of action.permissions) {
if (keys.includes(permission.name)) {
state[permission.name] = true;
} else {
return console.log('ELSE BLOCK FIRING');
}
}
return tassign(state);
似乎我忘记了使用该数组中的权限来更新模型,并且当for循环达到该权限时,整个状态变得不确定。
最终变成了reducer shenanigans,其中一个函数试图使用不存在的属性来做某事,每次都将init上的整个对象弄乱了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.