当前位置: 首页 > 知识库问答 >
问题:

Angular 2,一次从服务器加载数据并将结果共享给组件的最佳实践[重复]

柴嘉年
2023-03-14

使用服务在Angular 2应用程序中存储(和共享)初始值的最佳实践是什么?我有一个从服务器加载大量数据的服务,比如资源、配置以及其他数组和对象。我不想在每次加载组件或路由到视图时都加载这些数据,我只想使用应用程序启动时已经加载的这些对象和数组,并在需要时选择重新加载。问题是存储这些值的正确位置在哪里,以及如何在使用该服务的组件之间共享这些值?谢了。

共有3个答案

燕禄
2023-03-14

正确的地方绝对是一种服务。如果仅在一个位置将此服务添加为提供程序,则会与整个应用程序共享一个实例。如果将其添加到每个组件上的提供程序,则每个组件都会获得自己的实例 - 这是您要避免的

bootstrap(AppComponent, [HTTP_PROVIDERS, MyService]);
@Component({
  selector: 'some-comp',
  providers: [/* don't add MyService here !! */]})
class MyComponent {}
章建木
2023-03-14

您必须考虑共享服务,并确保组件之间只共享一个实例

共享服务和共享对象演示

注意:< br >不要忘记在bootstrap函数中注册服务。深入观察代码。你会得到你想要的。布线部分未演示。冲浪plunk进一步实施

服务.ts

import {Component, Injectable,Input,Output,EventEmitter} from 'angular2/core'
import {Router} from 'angular2/router';
import {Http} from 'angular2/http';


export interface Info {
   name:string;
}

@Injectable()
export class NameService {

  constructor(http:Http;router:Router)
  {
    this.http=http;
    // you can call server resource from here and store it down to any variable. 
  }

  info: Info = { name : "Jack" };
  change(){
    this.info.name = "Jane"; // this.info is shared among components.

  }
} 
墨翔宇
2023-03-14

冈特在共享服务方面是完全正确的!

下面是一个HTTP的更多细节,它依赖于观察值和缓存数据来进行下一次调用:

export class SharedService {
  constructor(private http:Http) {
  }

  getData() {
    if (this.cachedData) {
      return Observable.of(this.cachedData);
    } else {
      return this.http.get(...)
            .map(res => res.json())
            .do((data) => {
              this.cachedData = data;
            });
    }
  }
}
 类似资料:
  • 我可能遗漏了一些非常明显的东西,但我想做的是在组件之间异步共享从服务器获取的数据。 我的服务看起来是这样的: 因为流程是异步的,所以我需要promise响应,但是promise的响应返回实际的subscribe对象,而不是返回的< code>data.json。 这是一个配置文件页面,它由嵌套路由组成,所以我不能将数据传递给路由组件。路由组件之一是帖子,加载配置文件后,它应该开始获取服务中当前用户

  • 我正在使用angular2开发一个应用程序。我有一个场景,需要在路由时(使用router.navigate())将复杂的数据(对象数组)从一个组件传递到另一个组件(它们不是父子关系,而是两个独立的组件)。我在谷歌上搜索过,大多数结果描述了父子组件的场景。我浏览了结果,找到了这些传递数据的方法。 1)创建共享服务2)通过路由参数 第二种方法适合我(尽管我不喜欢上面解释的复杂数据)。我无法使用共享服务

  • 有没有人知道Docker中容器之间共享数据库的最佳实践是什么? 我的意思是我想在Docker中创建多个容器。然后,这些容器将以相同的身份在相同的数据库上执行CRUD。 到目前为止,我有两个想法。一种是创建一个单独的容器来运行数据库。另一种方法是直接在安装Docker的主机上安装数据库。

  • 分包 建议将服务接口、服务模型、服务异常等均放在 API 包中,因为服务模型和异常也是 API 的一部分,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。 如果需要,也可以考虑在 API 包中放置一份 Spring 的引用配置,这样使用方只需在 Spring 加载过程中引用此配置即可。配置建议放在模块的包目录下,以免冲突,如:com/alibaba/china/xxx/d

  • 服务开发最佳实践 一、服务 二、版本 三、API 1、非托管API 2、托管API 服务开发最佳实践 更新时间:2018-03-20 21:45:44 服务开发的流程从创建服务开始,每一个服务下可以创建多个版本,每一个版本下可以创建多个API。 一、服务 我们建议为每个服务取一个有意义的名字,同时为该服务打上标签。每一个服务最终将是一组API的集合,这些API具有某些共性,存在于一个服务之下。比如

  • 我想使用AWS S3和Lambda实现以下场景。 用户从手机上拍照,添加描述、位置和更多属性作为单独的元数据。将图像文件上传到S3,元数据作为文件内部元数据。根据这个链接,我可以通过将“x-amz-meta”作为键添加到ObjectMetadata中来实现。 每次在S3存储桶中创建文件时,我都会设法调用lambda,但在S3Event中,从lambda的调用方法中,我无法获得放入ObjectMet