我正在使用angular2(第5版)。 我发一个http请求回来json。 我知道如何访问和使用值,但不知道数组。 而且我没有找到如何提取元素内部的两个数组。
这里是我的json:
{ "ImpiantiProva": [
{
"nomeImpianto":"MFL1",
"descrImpianto":"Multifilo 1",
"posizione":"Place1",
"dati_status": "true",
"unita_misura": "m/s",
"vel_attuale": 11.5,
"vel": [24.5,13.6,34.6,12.1],
"orario": ["17.05","17.06","17.07","17.08"]
},
{
"nomeImpianto":"MFL2",
"descrImpianto":"Multifilo 2",
"posizione":"Place2",
"dati_status": "true",
"unita_misura": "m/s",
"vel_attuale": 12.5,
"vel": [24.5,13.6,34.6,12.1],
"orario": ["17.05","17.06","17.07","17.08"]
}
]
}
在data.service.ts中,我有http请求,它将值存储在:
stream$: Observable<ImpiantoModel[]>;
这里是我对模型的定义:
#impianto.model
export class ImpiantoModel {
nomeImpianto: string;
descrImpianto: string;
posizione: string;
dati_status: string;
unita_misura: string;
vel_attuale: number;
vel: VelocitaModel[];
orario: OrariModel[];
}
#orari.model.ts
export class OrariModel {
orario: string;
}
#velocita.model.ts
export class VelocitaModel{
vel : number;
}
为什么定义我的对象是正确的?
如何使用数组"vel"
和"orario"
?
如何使用"vel"
打印(访问)计算机的数组"nomeImpianto" = "MFL1"
?
如何在新阵列上复制数组"vel"
?
答案 0 :(得分:1)
我不确定我理解你,但我会尝试。
为什么定义我的对象是正确的?
应该是:
export class ImpiantoModel {
nomeImpianto: string;
descrImpianto: string;
posizione: string;
dati_status: string;
unita_misura: string;
vel_attuale: number;
vel: Array<string>;
orario: Array<string>;
}
(但我必须承认,我不知道为什么模型而不是界面)
如何使用数组“vel”和“orario”?
你是什么意思?
如何打印(访问)机器的数组“vel” “nomeImpianto”=“MFL1”
const thisContainsTheDataFromVel = whereYourDataIsStored['ImpiantiProva'].find((item) => { item['nomeImpianto'] === 'MFL1'})['vel'];
如何在新阵列上复制数组“vel”?
在此答案下阅读您的评论后更新:
我从您的示例中获取了代码并添加了您缺少的内容。我做到了它可以更加可重用(它可以进一步增强,但我希望你理解代码并做你需要的。)
copyArray(data, targetValue) {
const mfl1Data = data.find((item) => item['nomeImpianto'] === targetValue);
if (mfl1Data) {
return mfl1Data.vel;
}
return [];
}
getdata2() {
this.http.get<ImpiantoModel[]>(this.myUrl)
.subscribe(
data => {
this.variableToStoreIn = this.copyArray(data, 'MFL1');
data.forEach(item => {
this.sub$.next(item);
});
});
return this.sub$;
}
CopyArray查找数据并将其返回。如果您不希望这样,但只需将某个属性的值设置为vel数组的值,那么您可以将其更改为:
copyArray(data) {
const mfl1Data = data.find((item) => item['nomeImpianto'] === targetValue);
if (mfl1Data) {
this.yourVariable = mfl1Data.vel;
}
}
如果这个答案足够,请考虑将其标记为最佳答案,谢谢。
答案 1 :(得分:1)
以下是我对你想要做的事情的理解:在你的json resp中获取项目并将它放在你的对象中,所以最好的方法是在你得到json响应时直接创建一个静态方法,然后再返回value创建此适配器adaptImpiant(jsonObj),它将执行以下操作:
adaptImpiant(jsonObj) {
let impiantTab = [];
jsonObj.ImpiantiProva.forEach((item) => {
let impiantoModel = {};
// impiantoModel = item if the model (below) match the item;
// if not manually set all your var like your velocita
let velocita = [] // is an array or an object with an array
// if class velocita = {}
velocita = item.vel.slice(0);
// if class velocita.valuesTab = item.vel.slice(0);
impiantoModel.velocita = velocita;
impiantTab.push(impiantoModel);
}
}
在这种情况下你的模型似乎不对,因为你已经使用了ImpiantoModel数组,所以只需创建一个你想要的类:
#impianto.model
export class ImpiantoModel {
nomeImpianto: string;
descrImpianto: string;
posizione: string;
dati_status: string;
unita_misura: string;
vel_attuale: number;
vel: VelocitaModel // or simply [];
orario: OrariModel // or simply [];
}
答案 2 :(得分:0)
根据您的模型类,您的JSON是错误的。你应该有这样的东西:
{ "ImpiantiProva": [
{
"nomeImpianto":"MFL1",
"descrImpianto":"Multifilo 1",
"posizione":"Place1",
"dati_status": "true",
"unita_misura": "m/s",
"vel_attuale": 11.5,
"vel": [
{
"vel": 24.5
},
{
"vel": 13.6
}
...
],
"orario": [
{
"orario": "17.05"
},
{
"orario": "17.06"
}
...
]
}
]
}
您的模型希望ImpiantoModel.vel
和ImpiantoModel.orario
成为对象数组。在您的JSON响应中,一个是数字数组,另一个是字符串。
如果您想在HTML模板中使用它,请考虑您的.ts
文件中有类属性,如下所示:
private impiantoModels: ImpiantoModel[];
您可以在.html
模板中执行以下操作:
<div *ngFor="let impModel of impiantoModels">
...
<div *ngFor="let v of impModel.vel">
<p>{{v.vel}}</p>
</div>
<div *ngFor="let o of impModel.orario">
<p>{{o.orario}}</p>
</div>
</div>