我正在寻找方法来处理这个观察结果对我的结果,并且我总能得到服务从回调之外返回给我的值。
我提出的一个问题:
经常发生这种情况,虽然服务成功地将值返回给我,但我无法在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 +
答案 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);
}
}