带有typescript的Angular js-数据应该存储在控制器或服务中吗

Angular-js with typescript - should data be stored in controllers or services?

本文关键字:控制器 服务 存储 typescript Angular js- 数据 带有      更新时间:2023-09-26

我开发了一个web api服务器,最近也开始开发客户端,它是用Angular js和typescript开发的。

关于客户端代码的设计,我有一些不确定的地方。

比如说,我有一个显示项目列表的视图,这个视图的控制器被创建了很多次,每次单击按钮(例如)。该视图显示了一个项目列表,因此每次创建该数组时,都会通过控制器中的Http GET接收该数组,并且该视图具有

 ng-repeat="item in vm.items"

然而,在我看来,如果我把这个列表保存在一个服务上,根据我的理解,每个客户端只创建一次,我可以在创建服务时使用一次GET请求,并在如下视图中使用它:

ng-repeat="item in vm.service.items"

此项目列表的更新将仅通过使用信号器进行。

第二种方法有缺陷吗?因为现在我看不出不这么做的原因。

是的,对我来说,这听起来像是一项经典的DAL服务。我建议你在那里使用promise,这样你就可以跟踪所需数据何时得到解决。这里有一个例子:

 export class EntityProvider {
        static serviceName: string = "entityProvider";
        private entity = null;
        static $inject : string[] = ["YourService", "$q"];
        constructor(yourService: YourService, private mQService: ng.IQService) {
        }
        get getEntity(): ng.IPromise<ConnectionInfoDto[]> {
            if (this.entity === null) {
                return this.yourService.getEntity()
                    .then(result => {
                        this.entity = result.data;
                        return this.entity;
                    });    
            } else {
                return this.mQService.when(this.entity);
            }
        }

        static bootstrap(aModule: ng.IModule) {
            return aModule.service(this.serviceName, EntityProvider);
        }
    }