Angular Architecture:如何使用多个HTTP服务处理状态持久性?

问题描述 投票:3回答:2

我想知道您应该如何构建一个调用后端的应用程序。

在服务中包装HTTP调用似乎是一种自然的方式,但是如何/在何处保持数据的一致性?例如。我有一个显示某种待办事项列表的组件,该列表是从后端OnInit检索的。现在,当离开该组件路由并再次路由回时,将重置其所有数据。当然,您可以再次调用后端,但是将数据保留在某种服务(甚至是HTTP服务)中以供进一步使用不是更有利吗?

进一步说明:

class Service {

    storedData: number[] = []
    allObjects: BehaviorSubject<any> = new BehaviorSubject()

    ...


    getObj(id) {
        if (!this.storedData.includes(id)) {
            this.getDataFromServer(id)
        }
        return this.allObjects.pipe(
            map(objects => objects.find(obj => obj.id === id)),
            filter(obj  => obj && true)
        )
    }

    getDataFromServer(id) {
        return this.http.get(id).pipe(
            tap(obj => {
                this.storedData.push(id)
                this.allObjects.put(id, obj)
            })
        )
    }
}

这将是一种可行的方法,还是有其他方法来处理这种情况?

此外,使用需要多个服务来填充其所有字段的对象的最佳方法是什么。 (对象:{a: number, b: number}a通过AService检索,b通过BService检索。)>

您将这些对象存储在何处(将AService注入BService并将其存储在BService中/将两者都注入到向请求组件提供数据的第三项服务中?)

并且最好的存储方式是什么?

我想知道您应该如何构建一个调用后端的应用程序。在服务中包装HTTP调用似乎是一种自然的方式,但是如何/在何处保存数据以用于...

angular frontend persistence front-end-optimization
2个回答
0
投票

因此,首先,当您从任何页面路由回该特定URL时,由于您的OnInit中包含服务,因此将调用您的后端。


0
投票

[Victor Savkin,曾是Google Angular核心团队的成员,构建了依赖项注入,更改检测,表单和路由器模块,并在Managing State in Angular Applications上写了一篇出色的文章。

© www.soinside.com 2019 - 2024. All rights reserved.