Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带typescript的Angular js-数据应该存储在控制器或服务中吗?_Javascript_Angularjs_Typescript_Ng Repeat - Fatal编程技术网

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

Javascript 带typescript的Angular js-数据应该存储在控制器或服务中吗?,javascript,angularjs,typescript,ng-repeat,Javascript,Angularjs,Typescript,Ng Repeat,我开发了一个web api服务器,最近还开始开发客户端,它是用Angular js和typescript开发的 关于客户端代码的设计,我有一些不确定的地方 例如,假设我有一个显示项目列表的视图,并且该视图的控制器被多次创建,每次单击按钮(例如)。该视图显示一个项目列表,因此每次创建该数组时,都会通过控制器中的Http GET接收该数组,并且该视图具有 ng-repeat="item in vm.items" 但是,在我看来,如果我将此列表保存在一个服务上(据我所知,该服务仅为每个客户端创建一

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

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

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

 ng-repeat="item in vm.items"
但是,在我看来,如果我将此列表保存在一个服务上(据我所知,该服务仅为每个客户端创建一次),那么在创建服务时,我可以使用一个GET请求一次,并在视图中使用它,如下所示:

ng-repeat="item in vm.service.items"
此项目列表的更新将仅通过使用信号器进行


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

是的,这听起来像是我的经典DAL服务。我建议您在那里遵守承诺,以便能够跟踪所需数据的解析时间。以下是一个例子:

 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);
        }
    }
导出类EntityProvider{
静态服务名称:string=“entityProvider”;
私有实体=null;
静态$inject:string[]=[“YourService”,“$q”];
构造函数(yourService:yourService,私有mQService:ng.IQService){
}
获取getEntity():ng.IPromise{
if(this.entity==null){
返回这个.yourService.getEntity()
。然后(结果=>{
this.entity=result.data;
返回该实体;
});    
}否则{
返回this.mQService.when(this.entity);
}
}
静态引导(aModule:ng.IModule){
返回aModule.service(this.serviceName,EntityProvider);
}
}

您能更详细地解释一下您编写的这个函数吗?现在,我在服务中拥有的是:$http.get(“..”).success(函数(数据){ListService.service.items=data;});不同吗?我在getter而不是构造函数中解析值,并返回承诺而不是解析对象。啊,你让它作为惰性初始化工作?然而,为什么我需要回报一个承诺?如果对服务器的请求成功,我只想将数据保存在发出请求的服务中的一个数组中,而不以任何方式在控制器中处理它,就像我上面提到的那样。绑定将直接指向保存在serviceWell中的数组。使用这种方法,您有机会在控制器中使用服务,仅当数据已解析时,或例如,在解析前显示加载窗格。很高兴知道,但我真正想问的是,在singleton服务中保存数据是否有好处。这实际上意味着服务器中的每一个更改都需要对保存在那里的数据进行相同的更改。这意味着它将迫使我在客户端拥有更多的逻辑代码,而不仅仅是在每次创建控制器时使用HTTP GET。我想这样更有效,还有什么其他需要考虑的吗?