使用服务在Angular 2应用程序中存储(和共享)初始值的最佳实践是什么?我有一个服务,从服务器加载大量数据作为资源,配置和其他数组和对象.我不希望每次加载组件或路由到视图时都加载此数据,我只想在应用程序启动时使用这些对象和已加载的数组,并根据需要重新加载.问题是存储此值的正确位置以及如何在使用该服务的组件之间共享?谢谢.
Thi*_*ier 26
对于共享服务,Gunter是完全正确的!
以下是HTTP的一些更多细节,它依赖于下一次调用的observable和缓存数据:
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;
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
mic*_*yks 15
您必须考虑共享服务并确保在组件之间只共享单个实例.
注意:
不要忘记在bootstrap函数中注册服务.深入观察代码.你会得到你想要的.路由部分未演示.冲浪插头进一步实施
service.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.
}
}
Run Code Online (Sandbox Code Playgroud)
Gün*_*uer 12
正确的地方绝对是一项服务.如果仅在一个位置将此服务添加为提供程序,则会与整个应用程序共享一个实例.如果将其添加到每个组件的提供程序,则每个组件都会获得自己的实例 - 这是您要避免的
bootstrap(AppComponent, [HTTP_PROVIDERS, MyService]);
Run Code Online (Sandbox Code Playgroud)
@Component({
selector: 'some-comp',
providers: [/* don't add MyService here !! */]})
class MyComponent {}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
31926 次 |
最近记录: |