我试图通过添加实例ID来封装我的元素ID,像这样:
<label for="id-{{ unique }}-name"></label>
<input id="id-{{ unique }}-name" type="text" formControlName="name">
我以前使用过这个:https://dev59.com/9pvga4cB1Zd3GeqP68bd#40140762。 但是在将 Angular 从7升级到9后,它似乎已经过时了。 我正在考虑编写一个简单的助手服务,为我的应用程序生成唯一标识符。
类似于这样:
@Injectable()
export class UniqueIdService {
private counter = 0
constructor() {}
public getUniqueId (prefix: string) {
const id = ++this.counter
return prefix + id
}
}
受 lodash uniqueid 启发
但我更倾向于使用 Angular 内置的 id。目前我的解决方案是从组件的 _nghost
属性中提取 id。
constructor ( private element: ElementRef, ) {
const ngHost =
Object.values(this.element.nativeElement.attributes as NamedNodeMap)
.find(attr => attr.name.startsWith('_nghost'))
.name
this.unique = ngHost.substr(ngHost.lastIndexOf('-') + 1)
}
但是我对这个解决方案并不完全满意,我正在寻找直接访问该id的方法。
有人知道如何访问它吗?