将数据存储在服务角度2中的优良做法

sco*_*ion 4 service angular

在许多教程中,一些数据(例如待办事项列表)存储在服务中。这是好习惯吗?我是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);
   }

}
Run Code Online (Sandbox Code Playgroud)

Yak*_*ain 5

尽管服务通常用于通过与数据源进行交互来检索/更新数据,但它们在存储数据时也非常方便。例如,如果您需要检索大量数据,则可以将其缓存在服务中:

@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);
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

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

  • @FlyingV 该方法在两种情况下都会返回一个可观察值:1.缓存存在2.没有缓存值。这种统一的返回类型允许组件调用 loadData().subscribe(),而无需考虑数据是否已缓存或是否从服务器到达。 (2认同)

Adr*_*SSU 2

好的做法是使用服务来提供数据。服务是一个类,其方法调用 api(或其他)来获取(或发布、放置或删除)数据并将结果返回给组件。