【发布时间】:2019-12-23 23:12:05
【问题描述】:
我有user.service,我在其中从数据库中获取页面加载时的用户数据,并通过user.action 将它们保存到存储:
export class UserService {
user$ = this.store.select('user')
constructor(
private fireStore: AngularFirestore,
private fireAuth: AngularFireAuth,
private store: Store<AppState>
) {
this.fireAuth.authState.subscribe(auth => {
if (auth) {
const { uid } = auth
this.fireStore.collection('users').doc(uid).ref.get()
.then(data => {
const user = data.data() as User
this.store.dispatch(new UserActions.SaveUser(user))
})
} else {
this.store.dispatch(new UserActions.RemoveUser())
}
})
}
}
所以,如果数据库返回用户数据 - 我将它们保存到存储中,如果没有 - 这意味着用户没有登录,我从“用户”存储中删除用户数据。
我希望我的主页等到在加载之前使用User.service 获取数据,所以我认为我必须为此创建效果:
export class UserEffects {
@Effect()
loadUser$ = this.actions$.pipe(
ofType(UserActions.SAVE_USER),
map(user => user)
)
constructor (
private actions$: Actions,
private store: Store<AppState>
) {}
}
但如果我这样做,应用程序将开始无休止地发送UserActions.SAVE_USER 操作:
我应该如何以正确的方式做呢?
【问题讨论】:
-
还有一件事......如果你想在应用程序启动之前加载它:angular.io/api/core/APP_INITIALIZER 或者你可以使用路由解析器:angular.io/guide/router#resolve-pre-fetching-component-data
标签: angular ngrx ngrx-store ngrx-effects