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

Ada*_*hes 2 javascript typescript angular

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

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

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

@Component({   
export class ApprovalsComponent implements OnInit {
  _approvedOrDenied: boolean;
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

小智 6

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

使用这样的输入创建组件时

<app-my-component firstVariable="hello world"></app-my-component>
Run Code Online (Sandbox Code Playgroud)

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

但如果你这样做

<app-my-component [firstVariable]="hello world"></app-my-component>
Run Code Online (Sandbox Code Playgroud)

然后它将无法正常工作.因为在这里,你应该给一个变量.为了使它工作,使用它

<app-my-component [firstVariable]="'Hello world'"></app-my-component>
Run Code Online (Sandbox Code Playgroud)

现在,你给的东西就像一个"匿名变量":你使用引号,所以Angular理解它是一个字符串.

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

[value]="true" 
Run Code Online (Sandbox Code Playgroud)

我希望我帮忙!