在 ngFor 中动态分配元素 id

Posted

技术标签:

【中文标题】在 ngFor 中动态分配元素 id【英文标题】:Dynamically assign element id inside ngFor 【发布时间】:2018-09-10 09:32:24 【问题描述】:

我正在尝试为 *ngFor 中的 div 动态分配 id。我希望将 div 称为“wave1、wave2、wave3”等。

<li *ngFor="let episode of episodes; let i = index">
    <div id="wavei"></div>
</li>

但是,这会引发以下错误:

错误 DOMException:无法在“文档”上执行“querySelector”: '#wave[object Object]' 不是有效的选择器。

【问题讨论】:

你能在你使用'#wave...的地方添加代码吗?似乎很明显你用字符串连接对象 您使用的是哪个版本的 Angular? ***.com/q/34568497, ***.com/q/36051195 angular 2 是版本 【参考方案1】:

您可以使用 'wave' + i 代替wavei。将其设为 Angular Experession。这是完整的ngFor

<li *ngFor="let episode of episodes; let i = index">
     <div id=" 'wave' + i "></div>
</li>

它可以使用正确的id 创建div

document.getElementById("wave1")

输出将是这样的:

<div id=​"wave1">​wave1​</div>

但请记住,您的代码将从 wave0 开始,因为 i = index 从 0 开始。

【讨论】:

这对于分配 id 非常有用,但是你如何在你的 html 中动态地引用 Id 呢?我正在尝试对具有动态分配 ID 的字段进行验证。我需要能够说出像 *ngIf="'controlName' + index.invalid" 这样的话。【参考方案2】:

您所拥有的是正确的,应该以 4/5 角工作。您是否正在使用非常旧的预发布 Angular 2 版本?

这是一个堆栈闪电战,您的代码和下面的代码都在工作

https://stackblitz.com/edit/angular-khur4v?file=app%2Fapp.component.html

你也可以这样做,这是首选方式

<li *ngFor="let episode of episodes; let i = index">
    <div [attr.id]="'wave' + i">episode.name</div>
</li>

【讨论】:

【参考方案3】:

你不需要定义i

<li *ngFor="let episode of episodes">
    <div id="waveepisode">episode</div>
</li>

编辑:如果剧集是对象列表

<li *ngFor="let episode of episodes">
    <div id="waveepisodes.indexOf(episode)">episode.name</div>
</li>

【讨论】:

如果episodes 是一个对象列表,那将不起作用,它可能在 OP 的示例中 没错,让我修改示例【参考方案4】:

对我来说,如果我添加单引号就可以了。否则 Angular 会检测到一个 var。

<li *ngFor="let episode of episodes; let i = index">
    <div id="'wave' + i"></div>
</li>

【讨论】:

以上是关于在 ngFor 中动态分配元素 id的主要内容,如果未能解决你的问题,请参考以下文章

通过“Yair even or”将编号 ID 分配给可选网格的动态创建元素

在使用 php for 循环生成 div 并为它们动态分配 ids 后,我如何使用 jquery 定位 ids?

将 CKEditor 分配给动态创建的文本框元素

如何分配尚未分配的最低编号

在删除指向动态分配对象的指针向量中的元素之前,我需要做啥?

在运行时动态分配 MFC 命令 ID