Angular 2 Observables:获取返回我服务的价值的安全方式

时间:2018-03-31 18:16:25

标签: angular

我正在寻找方法来处理这个观察结果对我的结果,并且我总能得到服务从回调之外返回给我的值。

我提出的一个问题:

经常发生这种情况,虽然服务成功地将值返回给我,但我无法在this.templateFields[key].Lookup

中成功保存信息
  private getLookUpsFromFields() {
  var lu: any[] = [];
  //console.log('templatefields', this.templateFields);
  for (const key in this.templateFields) {
  if (this.templateFields[key].SimpleDataType === 'String List, Multi' ||
      this.templateFields[key].SimpleDataType === 'String List, Single') {
    //console.log('Field Lookup', this.templateFields[key].Field);
    this._lookUpsService.getLookUpsOfField(this.model, this.templateFields[key].Field).subscribe(success => {
       lu = this._lookUpsService.getArrayLook(success['metadataAllLookUpField']);
         localStorage.setItem(this.templateFields[key].Field, JSON.stringify(lu));
         }, error => {
            this.ShowMsg(error);
      });
      this.templateFields[key].Lookups =   JSON.parse(localStorage.getItem(this.templateFields[key].Field));
    }
    //localStorage.removeItem(this.templateFields[key].Field);
  }
}

// lookupsservice

getLookUpsOfField(model: string, field: string){
  //console.log(this.url + '/' + model + '/' + propertyType);
return this._httpS.get(this.url + '/' + model + '/' + field);
}


getArrayLook(lookups: any) {
  var array: any[] = [];
  if (lookups !== undefined && lookups !== null) {
    lookups.map(x => {
      array.push({Field: x.lookup_values.split(x.delimiter)[0], value: x.lookup_values.split(x.delimiter)[1]});
  });
  }
  return array;
}

我知道处理服务返回值的一种方法是在可观察范围内处理它们,但我还有其他选择吗?除了这两个替代方案,我展示: 1-)使用LocalStorage 2-)处理可观察范围内的逻辑

我想保证 this.templateFields [key] .Lookup 始终收到回调的返回值。

一些替代方案? 将提供任何额外信息。 我正在使用角度2 +

1 个答案:

答案 0 :(得分:0)

您可以创建存储数据和获取数据的服务 创建一个变量来存储数据 创建方法来设置数据和获取数据

//数据服务

import { Injectable } from '@angular/core';
@Injectable()
export class CommonDataService {
 public Data:any;

    getData(): any{
            return this.Data;
        }

        setData(data: any) {
            this.Data= data;
        }
}

当你想存储数据调用集的服务方法以及何时想要获取数据然后调用get方法的服务

private getLookUpsFromFields() {
  var lu: any[] = [];
  //console.log('templatefields', this.templateFields);
  for (const key in this.templateFields) {
  if (this.templateFields[key].SimpleDataType === 'String List, Multi' ||
      this.templateFields[key].SimpleDataType === 'String List, Single') {
    //console.log('Field Lookup', this.templateFields[key].Field);
    this._lookUpsService.getLookUpsOfField(this.model, this.templateFields[key].Field).subscribe(success => {
       lu = this._lookUpsService.getArrayLook(success['metadataAllLookUpField']);
         this._commonDataService.setData(JSON.stringify(lu));
         }, error => {
            this.ShowMsg(error);
      });
      this.templateFields[key].Lookups =   JSON.parse(this._commonDataService.getData()));
    }
    //localStorage.removeItem(this.templateFields[key].Field);
  }
}