Во всех вышеперечисленных случаях переменная правильно установлена, но неправильно прочитана! Правильный способ заключается в использовании двойных кавычек при ссылке на :
echo "$var"
Это дает ожидаемое значение во всех приведенных примерах. Всегда указывайте ссылки на переменные!
Почему?
Если переменная некорректна, она будет:
/* Foobar is free software */
После: /*
, Foobar
, is
, free
, software
, */
/*
После: /bin
, /boot
, /dev
, /etc
, /home
, ... /bin /boot /dev /etc /home Foobar is free software Desktop/ Downloads/
вместо значения переменной. Когда переменная цитируется:
Вот почему вы всегда должны цитируйте все ссылки на переменные, если вы специально не требуете разделения слов и расширения имени пути. Инструменты, такие как shellcheck , помогут вам и будут предупреждать о недостающих котировках во всех случаях выше.
У меня есть решение, но вам нужно изменить свой объект.
Вы должны переопределить метод toString для городов и имен в вашей модели:
test= [{
"id": "5b48bffc644fca001419769c",
"names": [{
"name": "bob",
toString: function(){return this.name;}
},
{
"name": "stan",
toString: function(){return this.name;}
}
],
"cities": [{
"city": "London",
toString: function(){return this.city;}
},
{
"city": "Madrid",
toString: function(){return this.city;}
}
]
}];
Раздел HTML будет выглядеть так:
<div *ngFor="let t of test">
<p> {{t.id}}</p>
<p> {{t.names.join(",")}}</p>
<p> {{t.cities.join(",")}} </p>
</div>
Выход:
5b48bffc644fca001419769c
bob,stan
London,Madrid
Вам просто нужно использовать *ngFor
, чтобы перебирать документы , а затем два *ngFor
s для итерации по names
и cities
, подобные этому ( StackBlitz Demo ):
ts:
documents = [{
"id": "5b48bffc644fca001419769c",
"names": [{"name": "bob"},{"name": "stan"}],
"cities": [{"city": "London"},{"city": "Madrid"}]
},{
"id": "5b48bffc644fca001419769cde",
"names": [{"name": "Jon"},{"name": "Doe"}],
"cities": [{"city": "Barcelona"},{"city": "Saragoza"}]
}
];
html:
<div *ngFor="let doc of documents; let last = last"> <!-- iterate over all documents, let last = last is optional -->
<p>Id: {{doc.id}}</p>
<!-- iterate over all names (n) for every document (doc) -->
<p>Names: <span *ngFor="let n of doc.names; last as lastName">{{n.name}}{{lastName ? '': ','}} </span></p>
<!-- iterate over all cities (c) for every document (doc) -->
<p>Cities: <span *ngFor="let c of doc.cities; last as lastCity">{{c.city}}{{lastCity ? '': ','}} </span></p>
<!-- optional , this will add a separator between documents-->
<hr *ngIf="!last"/>
</div>
Выход:
Предположим, что ваши данные documents
не возникают проблемы с сервером, затем попробуйте этот код HTML
ниже:
<div *ngFor="let d of documents">
<p>Id: {{d.id}}</p>
<p>Names: <span *ngFor="let dd of d.names">{{dd.name}},</span></p>
<p>Cities: <span *ngFor="let dd of d.cities">{{dd.city}},</span></p>
</div>
toString
? – lealceldeiro 13 July 2018 в 19:20