2017-06-12 92 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