无法绑定到“禁用”,因为它不是“li”的已知属性

Posted

技术标签:

【中文标题】无法绑定到“禁用”,因为它不是“li”的已知属性【英文标题】:Can't bind to 'disabled' since it isn't a known property of 'li' 【发布时间】:2017-05-05 14:23:16 【问题描述】:

我将[disabled] 属性添加到li 元素。但我得到这个错误:

无法绑定到“已禁用”,因为它不是“li”的已知属性。

这是我的代码部分:

<li [disabled]="pager.currentPage > 1">
</li>

谁能帮帮我?

【问题讨论】:

【参考方案1】:

&lt;li&gt; 元素没有 disabled 属性。 您希望应用于&lt;li 的组件或指令实际上没有被应用,或者应该设置disabled 属性而不是属性

<li [attr.disabled]="pager.currentPage > 1 ? true : null">

null 是在条件为假的情况下删除属性。布尔值 false 会导致

<li disabled="false">

这可能不是你想要的。使用null 你会得到

<li>

【讨论】:

感谢您的回答,它的工作。但是虽然li 元素有disabled 属性,但是还是可以点击的。使用a元素时会发生。 请参阅下面的答案。 &lt;li&gt; 不支持被禁用。 &lt;a&gt; 元素也不太容易禁用。另见***.com/questions/35431188/… 和***.com/questions/36985112/… 是的,我在下面看到答案【参考方案2】:

添加Gunter的答案。 Disabled 属性仅对具有可禁用操作的 html 标记有意义。

禁用元素

如果某个元素属于以下类别之一,则称该元素实际上已被禁用:

被禁用的按钮元素 被禁用的输入元素 选择被禁用的元素 被禁用的 textarea 元素 具有禁用属性的 optgroup 元素 被禁用的选项元素 具有禁用属性的字段集元素

https://www.w3.org/TR/html5/disabled-elements.html

所以禁用 li 是没有意义的,因为它没有任何开始的操作。

另一种理解方式,即 disabled 属性实际上是由表单相关指令定义的 @Input 属性,例如 FormControl 或 FormControlName 和 ... ,所以如果你不使用这些指令,你不能有禁用的属性。

例如,输入可以具有 disabled 属性,因为它可以具有 NgModel ,但 lidiv 不能具有 disabled 属性,因为它永远不能具有 NgModel !

所以为了 [disabled] 工作,angular 会检查两件事:

1- disabled 是 Angular2 定义的指令还是您定义的指令? (没有)。

2- disabled 是由另一个指令定义的 @input ? (是的,它已定义,但您没有使用它们,因为 li 不能拥有 FormControl!)。

那么Angular2会抛出一个错误。

其中,当您执行 [attr.disabled] 时,这不再是 @Input 了,它只是一个普通的 html 属性,就像所有其他普通属性一样。

所以如果你只需要 disabled 属性作为一个普通的 html 属性来做一些 css 的东西,你应该使用 [attr.disabled]

【讨论】:

xe4me,非常感谢 这个 [attr.disabled] 不适合我。

以上是关于无法绑定到“禁用”,因为它不是“li”的已知属性的主要内容,如果未能解决你的问题,请参考以下文章

如何解决错误 NG8002:无法绑定到“routerLink”,因为它不是“a”的已知属性。?

无法绑定到“目标”,因为它不是“div”的已知属性

无法绑定到“matMenuTriggerFor”,因为它不是“按钮”的已知属性

无法绑定到“(ngModel”,因为它不是角度单元测试用例中“输入”的已知属性

Angular 7 无法绑定到“routerlink”,因为它不是“a”的已知属性

无法绑定到“ngModel”,因为它不是“input”的已知属性,即使 FormsModule 是 importet