【问题标题】:Angular2: Parse input/select string value into strong typed valueAngular2:将输入/选择字符串值解析为强类型值
【发布时间】:2016-05-18 17:56:16
【问题描述】:

我现在正在寻找超过一天的时间来获得正确的答案,但我仍然有点无能为力。问题很简单:我有一个带有布尔属性的模型。我将该属性映射到一个选择,它允许用户选择正确的值(真、假或空)。 Angular 实际上是返回一个字符串。具体:

我有以下组件:

@Component({
  selector: 'clientlist',
  templateUrl: './app/components/clientlist/clientlist.html'
})

export class ClientListComponent {  
   searchRequest : ClientSearchRequest;
}

我有以下模板:

<select [(ngModel)]="searchRequest.online" class="form-control" (onchange)="search()" numberBinder>
    <option value="">Select</option>
    <option value="true">Online</option>
    <option value="false">Offline</option>
</select>

以及搜索请求模型类:

export class ClientSearchRequest {
name: string;
online: boolean;
status: string;
page: number;
pageSize: number;

constructor() {
    this.name = "";
    this.online = null;
    this.status = "";
    this.page = 1;
    this.pageSize = 50;
}

}

当我让模型被填充时,在线字段设置为一个字符串(“true”)。如何解决这个问题?什么是不创建额外组件等的正确方法。

【问题讨论】:

    标签: parsing typescript angular boolean


    【解决方案1】:

    我会尝试使用 ngValue 指令。这样,您将能够使用对象而不是字符串作为值:

    <select [(ngModel)]="searchRequest.online" class="form-control" 
            (onchange)="search()" numberBinder>
      <option [ngValue]="'null'">Select</option>
      <option [ngValue]="true">Online</option>
      <option [ngValue]="false">Offline</option>
    </select>
    

    使用null 值不起作用,因此您需要解决此问题。有关详细信息,请参阅此问题:

    【讨论】:

    • 当我应用这个时,我收到以下错误:Can't bind to 'ngValue' because it is not a known native property
    • 你用的是哪个版本的Angular2?
    • 啊!好问题,beta 11,我会升级到当前版本。
    • 我不知道它是在哪个版本上添加的,但在 beta14 中,ng-value 被重命名为 ngValue。查看更新日志:github.com/angular/angular/blob/master/CHANGELOG.md
    • 我花了一些时间来测试它,但升级确实解决了 cmets 中的第一个问题。它现在映射到布尔值。不,我会尝试做空值。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 2020-03-26
    • 2023-04-03
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多