【发布时间】:2017-06-22 18:52:51
【问题描述】:
如果我使用 *ngFor 构建访问链,我将无法访问异步管道提供的对象的属性。
在下面的示例中,假设测试行中的Parking 和下面的两行?.[filter.propName] 代表同一个对象上的同一个键。测试行将评估为真,但选中的属性不会。为什么?使用 *ngFor 删除这些内容时如何访问该属性?
例如,如果{{(compModel | async)?.Parking?.Garage}} === true 我也期望{{(compModel | async)?.[filter.propName].instance}} === true,但事实并非如此。
下面的语法不起作用。我用它来演示预期的功能。
<div *ngFor="let filter of filters | async">
...
<fieldset class="filter-category-title">
<legend>{{filter.name}}</legend>
<label *ngFor="let instance of filter.options">
test: {{(compModel | async)?.Parking.instance}}
<input type="checkbox"
checked={{(compModel | async)?.[filter.propName].instance}}
(click)="amenityEmit({category: filter.propName, filter: instance, resetCategory: false})">
{{instance}}
</label>
</fieldset>
</div>
我从服务器获取的过滤器数据格式如下。我使用它来构建一个比较模型,如下所示,这是我管理搜索结果页面状态的方式。 ([key: string] 始终是来自过滤器的 propName)。
export interface Filter {
base: boolean,
filter: string,
propName: string,
unionType: string,
inputType: string,
options: {
options: string[],
sectionTitle: string
}[] | string[]
}
compModel 接口:
export interface CompModel {
[key: string]: {
touched: boolean
unionType: string,
options: {
options: string[],
sectionTitle: string
}[] | string[],
updateSelf(x: CompModel, y: Action): void
}
}
【问题讨论】:
-
thing.['key']没有意义,要么是thing.key要么是thing['key']。 -
@jonrsharpe
key.x是一个评估为字符串的变量。当我需要的x不在thing.key.x下,而是在thing.x下时,在这里请求链式属性是不正确的。由于我只能通过key.x访问x,这就是我访问它的方式。我应该换一种方式吗? -
澄清一下——你目前正在做
thing1.[thing2.key],这在任何地方都不是有效的语法。thing1[thing2.key]可以使用,但不能与?一起使用。 -
明白了。我知道上面是不正确的,只是不知道如何处理来自 observable 的初始 null 值。谢谢!此外,您的愿望清单上的 MX Master 鼠标也非常出色。我现在正在使用我的。
标签: angular typescript angular2-template angular2-directives rxjs5