在离子2中缓存自定义组件内容

时间:2016-03-14 12:25:10

标签: javascript angular ionic2

我正在创建一个从远程源加载innerHTML的自定义组件。我的问题是如何加载应用程序时加载内容。现在,内容在页面显示时加载,并且在文本出现之前有一小段延迟。是否有一个事件可以附加到该组件以在应用加载时加载内容?

这就是我的组件的样子:

import {Component} from 'angular2/core'
import {DataProvider} from '../../providers/DataProvider'

@Component({

    'selector': 'ck-tos',
    templateUrl: 'build/directives/ckTos/ckTos.html',
    providers: [[Cashklick]],
})

export class ckTos {

    content: String = "";

    constructor(private DataProvider: DataProvider) {

        DataProvider.load('pages', 'terms').subscribe(
            data => {

                let response = data.json();
                if (response.content)
                    this.content = response.content;
                else if (response.error)
                    this.content = response.error;
                else
                    this.content = "Error: Unable to get any data ...";

            },
            err => {this.content = "Error: Unable to get any data ...";},
            () => console.log('DataProvider service for page terms completed')
        );
    }

}

当我打开应用程序时,我希望此组件在每次呈现组件时都不加入和使用内容变量而不调用远程服务。

2 个答案:

答案 0 :(得分:1)

您可以在服务中实施以下机制:

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

  load() {
    if (this.data) {
      return Observable.of(this.data);
    } else {
      return this.http.get(...)
                 .map(...)
                 .do(data => {
                   this.data = data;
                 });
  }
}

您需要为整个应用程序共享您的服务:

bootstrap(AppComponent, [ DataProvider ]);

注意不要在组件的DataProvider属性中指定providers

答案 1 :(得分:1)

您可以实现canReuse() https://angular.io/docs/ts/latest/api/router/CanReuse-interface.html,以便在远离并返回同一组件时不会重新创建组件实例

或者您可以将该代码移动到服务(可能转移到DataProvider或其他不依赖DataProvider的服务)并注入该服务。 DI将保留服务实例,包括数据。