[(ngModel)]绑定总是字符串吗?

时间:2017-11-09 14:53:02

标签: javascript angular typescript

在角度应用程序中考虑radiobutton HTML元素,

  <div class="radio">
    <label>
      <input type="radio" name="approvedeny" value="true" [(ngModel)]=_approvedOrDenied>
      Approve
    </label>
  </div>

在我们的组件上,_approvedOrDenied属性被声明为布尔值。

@Component({   
export class ApprovalsComponent implements OnInit {
  _approvedOrDenied: boolean;

但是,当单步执行客户端代码时,会将其设置为字符串。我的代码中没有可以执行此操作的强制转换,看起来像是自动执行此操作。

enter image description here

是否所有数据绑定属性都以角度形式返回为字符串?如果是这样,那么在typescript中声明类型_approvedOrDenied: boolean是什么意思?

2 个答案:

答案 0 :(得分:6)

不,它不总是一个字符串。顺便说一下,这是我第一次看到没有引号的标签!

当你使用像这样的输入进行组合时

<app-my-component firstVariable="hello world"></app-my-component>

然后它是一个字符串。在这种情况下,您甚至无法给出变量,输入将使用变量的名称作为值。

但如果你这样做

<app-my-component [firstVariable]="hello world"></app-my-component>

然后它不会工作。因为在这里,你应该给一个变量。要使其工作,请使用此

<app-my-component [firstVariable]="'Hello world'"></app-my-component>

现在,您正在提供类似于&#34;匿名变量&#34; :你使用引号,所以Angular理解它是一个字符串。

在您的情况下,您使用单选按钮。单选按钮是单选按钮组的一部分,每个按钮组都有字符串值。所以,即使你写的是真的,也不意味着它是一个布尔值!如果你想给它一个布尔值,你将不得不使用

[value]="true" 

我希望我帮忙!

答案 1 :(得分:0)

从html中移除value="true",它应该可以正常工作