javascript-空变量为输入的禁用属性提供真实值

我不知道这是问题还是正常行为.

如果我们有这样的形式:

<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将被禁用)

Plunker example

解决方法:

更新

我在有角度的源代码(< 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"  />

Working plunker example

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...