Angular 如何使用参数依赖于其他选择器的ngrx选择器
我正在尝试使用一个ngrx选择器,它接受一个jobId属性来返回一些数据作为一个可观察值 我首先从数据库中加载所有作业和任务,但它们没有及时返回选择器,我得到一个错误,因为this.task未定义,我相信这会阻止observable再次运行 在选择器尝试从存储区获取数据之前,是否有方法等待数据返回 this.store.dispatchfromTasks.loadAllTasks; this.store.dispatchfromJobs.loadAllJobs; taskSubscription$=this.store.pipe selectfromTask.getSelectedTask, taptask=>this.task=task.subscribe jobSubscription$=this.store.pipe 选择FromJob.getJobById,{jobId:this.task.jobId},Angular 如何使用参数依赖于其他选择器的ngrx选择器,angular,rxjs,ngrx,Angular,Rxjs,Ngrx,我正在尝试使用一个ngrx选择器,它接受一个jobId属性来返回一些数据作为一个可观察值 我首先从数据库中加载所有作业和任务,但它们没有及时返回选择器,我得到一个错误,因为this.task未定义,我相信这会阻止observable再次运行 在选择器尝试从存储区获取数据之前,是否有方法等待数据返回 this.store.dispatchfromTasks.loadAllTasks; this.store.dispatchfromJobs.loadAllJobs; taskSubscriptio
tapjob=>this.job=job.subscribe 您可以尝试使用RxJS过滤器 taskSubscription$=this.store.pipe selectfromTask.getSelectedTask, filtertask=>!!任务
taptask=>this.task=task.subscribe您可以尝试使用RxJS过滤器 taskSubscription$=this.store.pipe selectfromTask.getSelectedTask, filtertask=>!!任务
TopTease= > Tea=任务。订阅< /p> < p>这里是一个可以考虑的方法: 1选择器getSelectedTask如果未选择任务,则返回null
export const getSelectedTask = createSelector(
selectEntities,
getSelectedTaskId,
(entities: Dictionary<Task>, selectedId: number) => {
return selectedId ? entities[selectedId] : null;
}
)
Template.html
<ng-container *ngIf="selectedTask$ | async as selectedTask else noSelection">
<my-task [task]="selectedTask"></my-task>
// or
<span>{{ selectedTask.description }}</span>
</ng-container>
<ng-template #noSelection>
Please select a task !
</ng-template>
<>这是一个你可以考虑的方法: 1选择器getSelectedTask如果未选择任务,则返回null
export const getSelectedTask = createSelector(
selectEntities,
getSelectedTaskId,
(entities: Dictionary<Task>, selectedId: number) => {
return selectedId ? entities[selectedId] : null;
}
)
Template.html
<ng-container *ngIf="selectedTask$ | async as selectedTask else noSelection">
<my-task [task]="selectedTask"></my-task>
// or
<span>{{ selectedTask.description }}</span>
</ng-container>
<ng-template #noSelection>
Please select a task !
</ng-template>
这是可行的,但缺点是。如果以后没有选择的任务,任务将不会被分配为null,在这种情况下,组件将不会得到通知。谢谢!这似乎有效,但我不确定为什么。你能解释一下这是怎么回事吗!!任务在做?!!任务的意思是“不是任务”。这就等同于任务==未定义和任务!==无效的在这种情况下,正如Thierry Falvo所写,this.task不会被分配给null。如果需要“null”,则可以显式写入任务!='“未定义”或使用他的解决方案。我希望你成功!这是可行的,但缺点是。如果以后没有选择的任务,任务将不会被分配为null,在这种情况下,组件将不会得到通知。谢谢!这似乎有效,但我不确定为什么。你能解释一下这是怎么回事吗!!任务在做?!!任务的意思是“不是任务”。这就等同于任务==未定义和任务!==无效的在这种情况下,正如Thierry Falvo所写,this.task不会被分配给null。如果需要“null”,则可以显式写入任务!='“未定义”或使用他的解决方案。我希望你成功!谢谢你的回答。如果选择器返回null,当它尝试运行tap操作时,是否仍会导致问题?在哪个tap操作中?您应该避免将逻辑放在tap运算符或subscribe中。更愿意创建一个新的选择器,例如getSelectedJobs,它将返回当前选定任务的所有作业。在这种情况下,您将能够测试getSelectedId或getSelectedTask,然后对getSelectedJobs也返回null。因此,在这种情况下,您的*ngIf也将完美工作。希望这会有帮助。谢谢你的回答。如果选择器返回null,当它尝试运行tap操作时,是否仍会导致问题?在哪个tap操作中?您应该避免将逻辑放在tap运算符或subscribe中。更愿意创建一个新的选择器,例如getSelectedJobs,它将返回当前选定任务的所有作业。在这种情况下,您将能够测试getSelectedId或getSelectedTask,然后对getSelectedJobs也返回null。因此,在这种情况下,您的*ngIf也将完美工作。希望这会有帮助。