我不知道这是一个问题还是正常行为。
如果我们有这样的表格:
<form #form="ngForm" >
<div>
<label>field1</label>
<input type="text" name="field1" [(ngModel)]="mainVar" [disabled]="someVar" />
</div>
<div>
<label>field2</label>
<input type="text" name="field2" [(ngModel)]="someVar" />
</div>
</form>
同时,变量 mainVar 和 someVar 在组件中设置为空字符串:
mainVar = '';
someVar = '';
即使 someVar 为空字符串,也会导致名称 field1 被禁用输入。据我所知,变量是空字符串,应该将 false 返回到if语句。
但最奇怪的是,如果我从输入 field1 中删除 [(ngModel)] 属性,它将正常工作(输入 field1 如果我在输入 field2 )
中键入内容,则会禁用strong>答案 0 :(得分:5)
我在角度源代码中找到了答案(&lt; 3 open source!)。当ngModel
发生变化时,''
控制器会明确检查disabled input
。如果输入严格等于''
,则该元素将被禁用。所以这种行为是设计的。
以下是源代码外观的方法(link to GitHub,见第142和217行)
const isDisabled = disabledValue === '' || (disabledValue && disabledValue !== 'false');
这意味着您无法使用空字符串作为伪造来设置使用ngModel
禁用它的输入。
这是你如何解决它
<input type="text" name="field1" [(ngModel)]="mainVar" [disabled]="someVar ? true : false" />
答案 1 :(得分:-2)
将其设置为null / undefined / false,并且不会禁用它。 字符串为空仍然是一个值。