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

时间:2016-12-20 11:19:59

标签: angular

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

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

这是我的代码部分:

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

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:43)

<li>元素没有disabled属性 您希望应用于<li的组件或指令实际上未应用,或者可能应设置disabled属性而不是属性

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

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

<li disabled="false">

这可能不是你想要的。使用null即可获得

<li>

答案 1 :(得分:12)

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

禁用元素

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

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

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

因为没有任何行动可以开始使用,所以没有意义。

另一种理解这一点的方法是禁用属性实际上是一个@Input属性,它由表单相关的指令定义,比如FormControl或FormControlName和......,所以如果你不使用那些指令,你不能禁用属性。

例如,输入可以具有禁用属性,因为它可以具有NgModel,但 li div 不能具有禁用属性,因为它永远不会有NgModel !

因此,对于[禁用]工作,angular会检查两件事:

1- 禁用由Angular2定义或由您定义的指令? (不)。

2- 禁用 @input 是由另一个在标记中同一级别使用的指令定义的(如NgModel,FormControl和..) ? (是的,它是定义的,但是你没有使用它们,因为li不能有FormControl!)。

然后Angular2会抛出错误。

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

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