angular - 遍历对象中的数组参数
问题描述
我有一个这样的对象数组:
[{
position: "Software Developer",
company: "Big company",
details: [
"task1","task2,"task3"
]
},
{
position: "Software Developer",
company: "Another Big company",
details: [
"task1a","task2a,"task3a"
]
}]
我从组件中的服务中读到了这一点:
ngOnInit() {
this.data.getExperience().subscribe(
data => this.experience$ = data
)
}
在我的 html 中,我迭代了这个数组,但在循环中,我也想迭代细节。我尝试了几种方法,包括下面的方法,但我不太明白它是如何工作的。如何正确接近它?
<li *ngFor='let experience of experience$'>
<!--<a routerLink='/details/{{ user.id }}'>{{ user.name }}</a>-->
<ul>
<li class="position">{{ experience.position }}</li>
<!--<li><a href='http://{{ user.website }}'>{{ user.website }}</a></li>-->
<li class="company">{{ experience.company}}<span class="dates"> {{ experience.dates}}</span></li>
<ul class="details" *ngFor='let d of experience.details$'></ul>
<li>{{ d }}</li>
</ul>
</li>
解决方案
$
如果该属性包含 Observable 值,则通常在属性名称之后添加后缀。这是作为Angular Guide中所述的命名约定完成的:
因为 Angular 应用程序大多是用 TypeScript 编写的,所以您通常会知道变量何时是可观察的。尽管 Angular 框架不强制执行 observables 的命名约定,但您经常会看到 observables 以尾随的“$”符号命名。
这在扫描代码和寻找可观察值时很有用。此外,如果您希望一个属性存储来自 observable 的最新值,则简单地使用带有或不带“$”的相同名称会很方便。
由于您已经subscribing
到了 Observable 并且experience$
不会是 Observable 而是一个数组,因此您应该考虑以不同的方式命名该属性。
在没有 $ 的情况下试试这个。
详细li
信息也不在ul
. 因此,请执行以下操作来修复它:
<li *ngFor='let experience of experiences'>
<!--<a routerLink='/details/{{ user.id }}'>{{ user.name }}</a>-->
<ul>
<li class="position">{{ experience.position }}</li>
<!--<li><a href='http://{{ user.website }}'>{{ user.website }}</a></li>-->
<li class="company">{{ experience.company}}<span class="dates"> {{ experience.dates}}</span></li>
<ul class="details" *ngFor='let d of experience.details'>
<li>{{ d }}</li>
</ul>
</ul>
</li>
还要在您的组件类中进行此更改:
import { Component } from '@angular/core';
import { DataService } from './data.service';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
experiences: any[];
constructor(private data: DataService) {}
ngOnInit() {
this.data.getExperience().subscribe(
data => this.experiences = data
)
}
}
这是您参考的工作示例 StackBlitz。
推荐阅读
- android - (android) 如何从 DialogFragment 实现多选?
- node.js - 如何将 socket.io 连接到非网站应用程序?
- python - 熊猫在行中获取最大 ID 并添加到空行
- flutter - 如何在从另一个小部件继承的小部件中设置数据?
- javascript - VueJS- 在 v-for 循环中渲染表单,该循环引用最初为空的对象数组
- php - 如何在 laravel 刀片的 foreach 循环中获得第 n 行?
- javascript - 使用 axios 获取基于语言标头的翻译不起作用
- flutter - Flutter:没有为“Object”类型定义运算符“[]”。尝试定义运算符'[]'
- python - discord.py - 如何创建高级连接命令?
- mysql - 如何从服务器获取最新值?