奇怪的事情发生在我身上,我想分享,可能是一些人知道为什么会这样。
所以模板:
<ion-select>
<ion-select-option
*ngFor="let transportMode of transportService.getTransportModes()"
[value]="transportMode.id"
>
{{ transportMode.name }}
</ion-select-option>
</ion-select>
在.ts
文件中,服务被注入:
constructor(
protected transportService: TransportService,
) {}
服务只返回id/name对值的数组。就像这样:
getTransportModes(): TransportMode[] {
return [
{
id: TransportModeTypes.VAN,
name: 'Van',
},
{
id: TransportModeTypes.TRACTOR,
name: 'Tractor',
},
{
id: TransportModeTypes.TRAILER,
name: 'Trailer',
},
{
id: TransportModeTypes.SHIP,
name: 'Ship',
},
];
}
export enum TransportModeTypes {
VAN = 1,
TRACTOR = 2,
TRAILER = 3,
SHIP = 4,
}
export interface TransportMode {
id: TransportModeTypes;
name: string;
}
这个Ionic完美地构建了选择字段,但是当我点击下拉列表显示时,它会显示一个带有值和单选按钮的弹出窗口,而单选按钮是不可点击的,所以我不能选择一个值。这是非常奇怪的行为。
如果我在模板中进行更改并将值存储在单独的属性中-那么select就可以正常工作。
工作示例:
模板:
<ion-select>
<ion-select-option
*ngFor="let transportMode of transportModes"
[value]="transportMode.id"
>
{{ transportMode.name }}
</ion-select-option>
</ion-select>
.ts
文件:
protected transportModes!: TransportMode[];
constructor(
private transportService: TransportService,
) {}
ngOnInit(): void {
this.transportModes = this.transportService.getTransportModes();
}
我无法解释和猜测,为什么这是有效的,而上面的变体不起作用。有什么想法吗
我附上版本,只是为了更多的信息:
"@angular/core": "^15.2.7",
"@ionic/angular": "7.0.3",
2条答案
按热度按时间q35jwt9p1#
检查一下你的选择选项在一段时间后是否真的变成可点击的(以及有多快),这将是很有用的。
然而,在我看来,这似乎是在ngFor指令下调用方法的问题,因为每次检查DOM中的更改时都会检查/重新呈现。即使
getTransportModes()
所依赖的值没有改变,该方法也会在每次检查时执行。现在,即使这绝对是重新考虑逻辑并可能使用将在ts中设置值的var的原因(正如您在工作正常的情况下提到的那样),了解DOM检查更改的频率也很重要。是否有一些鼠标事件触发得太频繁?模板中的其他方法调用?如果您的模板在每次DOM检查时都会触发许多方法,那么它可能会阻塞您的流程。
3z6pesqy2#
看来这里一定有什么麻烦。
下面是一个barebones test使用您提供的代码。正如您所期望的,数据是通过ngOnInit从服务中获取并存储在属性中,还是直接从组件模板中获取,这没有什么区别。
请参阅“Transport One”以从组件模板获取它。
请参阅“Transport Two”,了解通过ngOnInit获取它并将其存储在属性中。