Angular 角度2观察值:获取返回服务值的安全方法
我正在寻找方法来处理这个可观察对象向我抛出的结果,并且我总是能够从回调外部获得服务返回给我的值 我提出的一个问题是: 经常发生的情况是,尽管服务成功地将值返回给我,但我无法将信息成功保存在Angular 角度2观察值:获取返回服务值的安全方法,angular,Angular,我正在寻找方法来处理这个可观察对象向我抛出的结果,并且我总是能够从回调外部获得服务返回给我的值 我提出的一个问题是: 经常发生的情况是,尽管服务成功地将值返回给我,但我无法将信息成功保存在this.templateFields[key]。Lookup private getLookUpsFromFields() { var lu: any[] = []; //console.log('templatefields', this.templateFields); for (cons
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);
}
}
//查找服务
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-)使用本地存储
2-)在可观察范围内处理逻辑
我想保证this.templateFields[key].Lookup始终接收回调的返回值
有别的选择吗?
将提供任何额外信息。
我正在使用angular 2+您可以创建服务来存储数据和获取数据 创建一个变量来存储数据 创建用于设置数据和获取数据的方法 //数据服务
import { Injectable } from '@angular/core';
@Injectable()
export class CommonDataService {
public Data:any;
getData(): any{
return this.Data;
}
setData(data: any) {
this.Data= data;
}
}
当您想要存储数据时,请调用服务的set方法;当您想要获取数据时,请调用服务的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);
}
}
谢谢你的回答,但是,这个可行的解决方案对我不起作用,现在我正在用另一种方法,我再次思考这种调用查找的方法是否正确。