我不知道这是问题还是正常行为.
如果我们有这样的形式:
<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为空字符串,这也会导致名称字段1的输入被禁用.据我所知,为空字符串的变量应在if语句中返回false.
但是最奇怪的是,如果我从输入字段1中删除[[ngModel)]属性,它将按预期工作(如果我在输入字段2中输入内容,则输入字段1将被禁用)
解决方法:
更新
我在有角度的源代码(< 3开放源代码!)中找到了答案.更改禁用的输入后,ngModel控制器会明确检查''.如果输入严格等于“”,则该元素将被禁用.因此,此行为是设计使然. 这是源代码的外观(link to GitHub,请参见第142和217行)
const isdisabled = disabledValue === '' || (disabledValue && disabledValue !== 'false');
这意味着您不能将空字符串用作虚假来设置使用ngModel禁用它的输入.
这是你如何解决它
<input type="text" name="field1" [(ngModel)]="mainVar" [disabled]="someVar ? true : false" />