Angular 2 组件中重复的“id”属性

2024-03-10

Context

我正在为复选框编写一个自定义 Angular 组件。该组件呈现复选框标记和标签标记。复选框的“id”属性和标签的“for”属性都设置为组件的id财产(一个@Input到组件)以确保单击标签将切换复选框。该模板的简化版本如下所示:

<div class="checkbox">
    <input type="checkbox" [id]="id" />
    <label [for]="id"><ng-content></ng-content></label>
</div>

Problem

当我在组件上设置“id”属性时(例如<my-checkbox id="hello">Check me</my-checkbox>),“id”属性会自动设置在 DOM 中的组件包装标签上。这会导致 DOM 中出现重复的 id,因为我已经在组件内的复选框上设置了“id”属性。这是无效的,并且破坏了浏览器默认的通过单击标签进行切换的行为。 DOM 输出为:

<my-checkbox id=“my-checkbox” ng-reflect-id=“my-checkbox” ng-reflect-checked="true">
    <div ng-reflect-ng-class="[object Object]" class="checkbox">
        <input class="checkbox__element" type="checkbox" name="fire_missiles" ng-reflect-id=“my-checkbox” id=“my-checkbox” value=“fire_missiles” ng-reflect-checked="true">
        <label class="checkbox__label" ng-reflect-html-for=“my-checkbox” for=“my-checkbox”>
            Fire missiles?
        </label>
    </div>
</my-checkbox>

有没有办法a)摆脱垃圾容器标签或b)停止将“id”属性作为属性自动反射到容器上?

注意:使用应用于 div 之类的属性选择器并没有帮助,它只是将多余的“id”从<my-checkbox />到 div。


我只需重命名复选框的 id(因此标签的for属性),这样它就不会与组件的 id 冲突,如下所示:

<input id="{{ id }}-checkbox" …>
<label for="{{ id }}-checkbox">…</label>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2 组件中重复的“id”属性 的相关文章

  • 让管道自我刷新角度

    我有来自后端的静态时间戳 我想每 1 秒刷新一次管道以获取现在的日期 这是我的烟斗 import Pipe PipeTransform from angular core import moment from moment Pipe nam
  • 在 Angular 4 中处理来自 Api 的过期令牌

    我需要帮助来处理我的角度应用程序中的过期令牌 我的 api 已过期 但我的问题是当我忘记注销我的角度应用程序时 一段时间后 我仍然可以访问主页但没有数据 我能做点什么吗 有没有可以处理这个问题的库 或者有什么我可以安装的吗 更好 如果我什么
  • Angular2、ZoneJS 和外部更改的 DOM

    我需要一些有关 Angular2 RC1 Web 应用程序中外部更改的 DOM 的帮助 场景很简单 我确实有一个带有相应模板的组件 其中包含一个具有如下 ID 的空 div div div typescripted 组件有一个 ngOnIn
  • 如何在 Angular2 中实现间隔/轮询以与量角器一起使用?

    我有一个 angular2 应用程序 我想用量角器进行测试 在此应用程序中 我有一个带有图表的页面 该页面正在使用自动生成的数据定期更新 显然 Protractor 的一项功能是在执行测试代码之前等待脚本和 http 调用完成 但是 如果有
  • 找不到模块“@angular/platform-b​​rowser/animations”

    我收到错误 ts 找不到模块 angular platform b rowser animations 我已经安装了以下内容 npm install save Angular Material Angular cdk npm install
  • Angular 7通过调用两次服务订阅方法进行通信

    我正在使用角度 尝试与非父子组件进行通信 所以我通过服务来传达它 服务 ts Istoggle false Output change EventEmitter lt boolean gt new EventEmitter toggle t
  • Angular2 authguards 执行异步函数失败

    我想通过检查用户是否从服务器登录来保护我的路由 但异步函数不会被执行 这是我的代码 canActivate route ActivatedRouteSnapshot state RouterStateSnapshot Observable
  • 两个服务如何以双向方式相互通信?

    一种是通过事件 另一种是通过调用方法 我试图在我的应用程序中实现聚合模式 我有 AuthService 在这里我处理身份验证结果并发出事件 if auth this eAuth emit true else this eAuth emit
  • Angular 2 Observable 具有多个订阅者

    我有一个 Angular 2 服务 可以从 API 获取数据 该服务有 3 个订阅者 在组件中定义 每个订阅者都对数据执行其他操作 不同的图表 我注意到我正在向 API 发出三个 GET 请求 而我想要实现的是一个请求 并且订阅者将共享数据
  • 测试 - 存根服务方法未定义

    我已经在非常简单的代码上编写了一个非常简单的测试 但由于某种原因存根服务方法未定义 当我使用 Jasmine Spy 时 它可以工作 但对于这样一个简单的任务 有人可以解释一下为什么会发生这种情况吗 我删除了 import 语句只是为了减少
  • 数字和文本列的垫排序问题

    我有角度材料数据源 角度材料版本是 5 0 3 排序正在进行中 但是对于某些列 它的排序不正确 那里有数字和文字 例如 排序结果如 XXX 1 1tesxt 1 OPD OXD 12
  • Angular 5 中使用 rxjs 进行持久订阅

    我对 Angular 5 中的 rxjs 仍然有点陌生 并且很难表达我的问题 我仍然希望得到一些提示 我经常会得到相同的设置 多个组件显示相同的数据 访问数据的单个服务 现在通过 Observables 接收数据时我有 2 个选择 a 订阅
  • 无法在 Angular 10 中的“pdf-viewer”=>“ng2-pdf-viewer”中显示 blob url

    我有一个 API 它将上传的文件作为 blob 返回 当我尝试绑定时src如果使用 blob URL 则它不会显示任何内容 但是 当我尝试绑定直接 URL 时 它可以显示 PDF 文件 这是我下面给出的代码 我的 TS 代码 downloa
  • 发生未处理的异常:工作区中未设置配置“生产”

    您好 在 Angular 8 中创建了一个项目 最初它仅支持一种默认语言 US EN 然后我应用了本地化 在准备生产构建的本地化之前 我曾经给出以下命令 ng build prod base href Windchill com qiwkC
  • Angular 2 - 突出显示更新的表格单元格

    如何在表中刷新改变其值的单元格 tr td product productName td td product price td tr 在组件中我有产品的输入 Input products Array
  • 如何在 ngrx/effects 中执行 if/else 操作?

    我正在使用 ngrx effects 我想根据以下情况分派不同的操作foo商店里的状态 这就是我现在正在做的 Effect foo1 this updates whenAction Actions FOO filter obj gt obj
  • 如何在使用可观察对象作为数据源的同时使角度数据表更新行、结果数和分页

    我正在尝试在我的 Angular 7 应用程序中使用 Angular Datatables 作为显示搜索结果的组件 请求创建组件创建一个搜索表单 当单击提交按钮时 使用请求服务将 http Post 请求发送到后端 然后请求创建组件更新请求
  • 如何使用 *ngFor 迭代对象键

    我想在 Angular 2 中使用 ngFor 迭代 object object 问题是该对象不是对象的数组 而是包含更多对象的对象的对象 data id 834 first name GS last name Shahid phone 0
  • 如何更改元素的 CSS 类并在单击时删除所有其他类

    我如何处理 AngularJS 2 中的一种情况 即单击一个元素需要更改其自己的样式 并且如果其他元素具有该样式 则需要将其删除 最好在一个函数中 如同Angular js 如何在单击时更改元素 css 类并删除所有其他元素 https s
  • Angular 停止 Enter 键提交

    I am trying to stop the Enter from submitting my button and rather make it point to another function I tried trapping th

随机推荐