angular - Angular:多个组件中的相同 id 属性
问题描述
我刚刚发现,如果我们id
对多个组件中的 HTML 元素使用相同的属性,并且如果这些组件在视图中一起呈现,则会id
在DOM
.
例如,考虑以下场景:
//hello.component.html
<p id="greet">Hello</p>
//welcome.component.html
<p id="greet">welcome</p>
//app.component.html
<app-hello></app-hello>
<app-welcome></app-welcome>
考虑到app-hello
,分别app-welcome
作为hello
和welcome
组件的选择器,当它们在app
组件中渲染时,它们id
内部的属性将被重复,具有相同的值。因此,这将打破 的W3C
标准,该标准id
规定id
属性值在整个DOM
.
由于据说组件是独立的、封装的 UI 片段,我认为id
在实现组件时验证所有组件中元素的属性是否唯一是不可取的。
那么,在这种情况下应该采取什么方法来维护唯一id
属性呢?这些片段基于 Angular,但我认为这个问题将适用于所有基于组件的框架,如 React、Vue 等。
解决方案
在我们的应用程序中,我们不会为元素设置 Id 属性,以防我们想要设置主题,我们使用 css 类,如果我们想要获取元素的引用,我们使用模板引用来获取该元素或其他角度查询模板中的一个元素。
<p #greet>Hello</p>
零件
@ViewChild('greet' , {static:true}) greetElemnt:ElementRef;
ngOnInit(){
console.log(this.greetElemnt.nativeElement)
}
推荐阅读
- javascript - 为什么我们将引号之间的空格放在括号内?JavaScript
- azure - 如何绕过 Azure Data Lake Storage 防火墙配置中的 200 个 IP 地址规则限制?
- node.js - 为什么不推荐使用 node fs Promises API?
- python-3.x - Matplotlib - 图形和图像坐标之间的转换
- c++ - 无法为ros-noetic安装ros仓库
- python - 谷歌协作:从谷歌驱动器读取 gsheet 文件
- python - 如何导入和使用在另一个python程序的类中定义的变量?
- linux - docker 引擎如何与 docker 容器通信?
- android - recyclerview 中的项目(在一个片段中)到另一个带有 recyclerview 的片段的共享元素转换不起作用(效果为 Whatsapp 图像)
- postgresql - 大数据和大分组的优化查询