Angular 我可以在角形防护装置中使用生命周期挂钩吗?

Angular 我可以在角形防护装置中使用生命周期挂钩吗?,angular,rxjs,angular8,angular-router,Angular,Rxjs,Angular8,Angular Router,我在做角形的。在我的项目中,在第一个页面加载时加载数据的操作是由一个守卫调度的。我需要修改守卫才能进入商店。我订阅构造函数中的存储并访问我想要的任何数据。我在哪里可以退订?我可以使用Ngondestory吗 这是我的密码 import{Observable,Subject}来自'rxjs'; 从'@ngrx/Store'导入{Store,Action,State}; 从'@ngrx/effects'导入{Actions,Effect,of type}; 从“@angular/core”导入{In

我在做角形的。在我的项目中,在第一个页面加载时加载数据的操作是由一个守卫调度的。我需要修改守卫才能进入商店。我订阅构造函数中的存储并访问我想要的任何数据。我在哪里可以退订?我可以使用Ngondestory吗

这是我的密码

import{Observable,Subject}来自'rxjs';
从'@ngrx/Store'导入{Store,Action,State};
从'@ngrx/effects'导入{Actions,Effect,of type};
从“@angular/core”导入{Injectable};
从“@angular/Router”导入{Router,Resolve,ActivatedRouteSnapshot,CanActivate};
从“../store”导入*作为更新存储;
从“../store/actions/Update.actions”导入{SetEntityType,LoadEntityList1};
从“rxjs/operators”导入{takeUntil};
@可注射()
导出类EntityListingGuard实现CanActivate{
框架:任何;
状态:任何;
类型:任意;
destroyStore$=新主题();
建造师(
私家店,
私有操作$:操作,
专用路由器
) {
这个。商店。烟斗(
takeUntil(此.destroyStore$)
).订阅((状态)=>{
this.Framework=state.SelectedFilters['FrameworkChecked']?state.SelectedFilters['FrameworkChecked']:[];
this.Type=state.SelectedFilters['typeChecked']?state.SelectedFilters['typeChecked']:[];
this.Status=state.SelectedFilters['statusChecked']?state.SelectedFilters['statusChecked']:[];
});
}
canActivate(路由:ActivatedRouteSnapshot):可观察的|承诺|布尔值{
const entityType=route.params['entityType'];
const releaseId=route.params['releaseId'];
const noOfUpdates=route.params['noOfUpdates'];
常数有效载荷={
'searchTerm':'',页面限制:50,'entityType':entityType,'releaseId':releaseId,NoofUpdate:NoofUpdate,
“CheckedJobFramework”:this.Framework“checkedJobStatus”:this.Type“checkedJobType”:this.Type
};
dispatch(SetEntityType({entityType:entityType}));
dispatch(LoadEntityList1({payload:payload}));
const responseOK=this.actions$.pipe(类型为(UpdateActions.LoadEntityList1Success));
const responseERROR=this.actions$.pipe(类型为(UpdateActions.globalError));
返回可观察。种族(responseOK,responseERROR)。取(1)
.map(操作=>{
如果(操作['type']='[Layout]全局错误'){
返回false;
}否则{
返回true;
}
}).first();
}
}

防护装置不是组件,因此它们没有挂钩。一种方法是获取数据并立即取消订阅,就像使用
take(1)
进行
race
一样

此外,查看您的代码,在获取状态后使用减速机时会出现逻辑混乱。用于将数据缩减到存储中的缩减器。请考虑深入研究通量/ReDux模式。


第二个“也是”,商店是异步的,你的守卫是不可预知的——考虑你在代码中需要的东西> CANActudio并将结果返回为可观察的。

更多的“也”,你正在执行<代码>(1)< /> > <代码>第一< /代码>,使用<代码>动作< /代码>查看响应,使用任何命名约定,不使用
路由器
-请更准确地查看angular文档,以及rxjs/NGRX编辑的代码,以处理
减速器
。实际上,这是一种伪代码,因为所有的名称都被更改了,它与原始代码很相似,因为我不能在这里输入精确的代码。另外,这是别人的代码,所以我更困惑了。明白了,我只是指出了可能会导致问题的部分,从我的角度来看不稳定,可能会对主要问题产生副作用。虽然,主要问题可以通过简单的“角形防护钩”在谷歌上找到,你会马上得到答案“防护装置不是组件等等。”嗯。我和一位队友讨论过这一点,但他们不清楚挂钩会在防护装置中造成什么问题。所以我们现在只是将这一动作转移到组件的
ngOnInit