微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

服务中的 NGXS @Select 导致问题

如何解决服务中的 NGXS @Select 导致问题

我在我的 angular 应用程序中使用 NGXS,在我的一些服务中,我需要在返回数据之前选择状态。 看起来很简单,我制作了这样的字段:

@Select(AuthState.token) token$!: Observable<string | null>;

并像这样使用它:

public getFieldDeFinitions(): Observable<ApiFieldDeFinition[]> {
    return this.token$
        .pipe(mergeMap(token => of([{}])));
}

此服务的使用状态如下:

@Action(FieldDeFinitionsGet)
get(ctx: StateContext<FieldDeFinitionsstateModel>,action: FieldDeFinitionsGet) {
    return this.fieldDeFinitionsService.getFieldDeFinitions()
        .pipe(tap(d => ctx.setState(
            patch({
                fieldDeFinitions: d
            })
        )))
        .pipe(tap(d => console.log('fieldDeFinitions',d)));
}

问题是状态永远不会被设置。调用服务返回数据 setState 方法,但未应用状态。在控制台中,我可以看到操作已开始,但从未完成:

enter image description here

任何可能导致问题的线索?

当我使用 selectSnapshot 时,一切正常。

解决方法

听起来您的 http 调用实际上并未发生。您能否验证是否正在调用 setState 方法?

只是我的意见,但这是一种非常......有趣的设置标题的方式。在我看来,只使用有角度的 http 拦截器会容易得多,因为这就是它们的用途。

https://angular.io/guide/http#setting-default-headers

,

可能是当你使用选择器时,数据是不可变的,导致选择器失败。使用 selectSnapshot 时,您会收到一份您所在州的副本,它允许您更改数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。