2017-06-12 36 views
0

我经常使用下面的代码中找到自己:与可观测值调度操作

export class Component implements OnDestroy { 

    private subscription: Subscription; 

    user: string; 

    constructor(private store: UserStore) { 
    this.subscription = store.select(fromUsers.getUser) 
     .subscribe(user => this.user = user); 
    } 

    ngOnDestroy(): void { 
    this.subscription.unsubscribe(); 
    } 

    logout(): void { 
    this.store.dispatch({ 
     type: LOGOUT, 
     payload: { 
     user: this.user 
     } 
    }) 
    } 
} 

正如你看到的,我需要给用户的字符串存储为组件中的成员与我的有效载荷发送。

我宁愿使用用户字符串作为observable并使用异步管道。

如何在调度动作而不将其存储在成员变量中时更改我的代码以利用用户的observable?

+0

用户注销操作与商店用户之间没有任何关联。我认为你不应该/不能连接它们。 – Skeptor

+0

你能解释为什么没有联系?没有用户,注销不起作用。 – Gambo

回答

2

您可以使用ngrx效果并使用当前用户增强LOGOUT命令。

@Effect() logoutEffect$ = this.actions$ 
    .ofType(LOGOUT) 
    .withLatestFrom(this.store$) 
    .map(([action: Action, storeState: AppState]) => { 
    return storeState.getUser; 
    }) 
    .map(payload => ({type: 'LOGOUT_USER', payload})) 
+0

谢谢你的工作,我会接受这个答案。我也考虑过这种方法,但我没有考虑到这一点,因为行动有效载荷在派遣时并不代表状态。这可能会导致出现问题,我想重播或撤消操作,因为状态是从效果中提取的,并未在操作本身中表示。 – Gambo