angular - 将数据存储在服务 Angular 2 中是一种很好的做法

标签 angular service

在很多教程中,一些数据(例如待办事项列表)存储在服务中。这是好的做法吗?我是 Angular 2 的新手,我想学习如何编写正确的代码。

一些代码示例:

@Injectable()
export class JsonRestService {

    jsonObject = {};
    jsonContent = {};

    constructor(private http:Http) {
        this.getXmlInJson()
        .subscribe(
            data => this.startGeneratingHtmlTemplateProcess(data),
            error => console.log(error + " - Błąd pobrania jsona")
        );
    }

    getXmlInJson() {
        let url = "http://localhost:8080/xml";
        return this.http.get(url);
    }

    public convertRestJsonToObject$() {
        this.getXmlInJson()
        .subscribe(
            data =>  this.startGeneratingHtmlTemplateProcess(data.json),
            error => console.log(error + " - Błąd pobrania jsona")
        );
   }

   private startGeneratingHtmlTemplateProcess(data) {
        this.jsonObject = JSON.parse(JSON.parse(JSON.stringify(data))._body);
        this.jsonContent = JSON.parse(JSON.stringify(data._body));
        console.log(this.jsonObject);
        console.log("Json:");
        console.log(this.jsonContent);
   }

   showObjectInConsole() {
       console.log("Wyzwolone prze przycisk: ");
       console.log(this.jsonObject);
   }

}

最佳答案

虽然服务通常用于通过与数据源交互来检索/更新数据,但它们在存储数据方面也非常方便。例如,如果你需要检索一大段数据,你可以在服务中缓存它:

@Injectable()
export class DataService{

    mydata: Array<string>[];

    constructor(private http:Http){}

    loadData(): Observable<string[]> {
        if (this.mydata){
            return Observable.from(this.mydata);  // return from cache
        } else
        {
            return this.http.get("./assets/LargeDataSet.json")
                .map(res => res.json())
                .do(data => this.mydata = data);
        }
    }
} 

在此示例中,大型数据集的检索将在第一次调用 loadData() 时发生,而后续调用将快速返回数据,而无需耗时的 http.get()。由于服务可以是单例,因此许多组件可以利用服务中缓存的数据。 您还可以将应用状态存储在单例服务中。

关于angular - 将数据存储在服务 Angular 2 中是一种很好的做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45012243/

相关文章:

angular2 rc.4 layz路由

javascript - Angular 2 : What does binding event to 0 mean?

service - 当面向消息的中间件完成这项工作时,为什么还要为服务发现而烦恼?

android - 在android中停止服务

c# - 服务没有及时启动 - c# windows 服务

angular - 我无法使用 http-server 访问页面

angular - 在服务的构造函数中等待订阅

Angular 垫分隔器垂直宽度不调整

android - 无法启动服务 Intent { cmp=com.marie.mainactivity/.BackgroundService } : not found

java - 使用绑定(bind)程序调用服务方法时如何使用线程