空变量为输入

时间:2017-04-05 12:50:46

标签: javascript angular angular2-forms angular2-directives angular2-ngmodel

我不知道这是一个问题还是正常行为。

如果我们有这样的表格:

<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>

Plunker example

2 个答案:

答案 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"  />

Working plunker example

答案 1 :(得分:-2)

将其设置为null / undefined / false,并且不会禁用它。 字符串为空仍然是一个值。