【问题标题】:convert a select option to boolean value将选择选项转换为布尔值
【发布时间】:2016-10-07 06:32:43
【问题描述】:

我正在学习 angular2。这里我有以下问题:

我有一个 select 字段,它应该用作布尔值:

<select [(ngModel)]="caseSensitive">
    <option>false</option>
     <option>true</option>
   </select>

不,如果我在我的过滤器中使用它,它将作为字符串而不是布尔值发送。是否可以使用转换器或类似的东西进行转换:

这是我完整的 HTML 代码:

<input [(ngModel)]="nameFilter"/>
<select [(ngModel)]="caseSensitive">
    <option>false</option>
     <option>true</option>
   </select>



<table>
  <tr *ngFor="let p of (persons | MyFilter: nameFilter:caseSensitive); let i = index">
    <td>{{i + 1 }} </td>
    <td>{{
      p.givenName+" "+ p.familyName
    }}</td>
    <td><img src="/img/flags/{{ p.nationality}}.png"></td>

  </tr>
</table>

ts 代码:

import { Component } from '@angular/core';

import {MyFilter} from './MyFilter';

@Component({
  selector: 'pizza-root',
  pipes: [MyFilter],
  templateUrl: 'app.component.html'  
})
export class AppComponent {
    public year = new Date().getFullYear();
    public persons =[{"givenName":"Paul", "familyName": "Smith", "nationality":"american"},
                     {"givenName":"Jens", "familyName":"myName1", "nationality":"german"},
                     {"givenName":"Ernst", "familyName":"myName1", "nationality":"german"},
                     {"givenName":"Jenny", "familyName":"myName1", "nationality":"german"}];
    constructor (){
        console.log(this.persons);
    }
}

管道:

import { Pipe, PipeTransform} from '@angular/core';

@Pipe({
    name: 'MyFilter'
})

export class MyFilter implements PipeTransform{
    transform( items: any[], args: string, caseSensitive : boolean ):any {
        if (items != null && args != undefined && args  != ''){
            if (caseSensitive){ 
                console.log("caseSensitive")
                return items.filter(item=>item.givenName.indexOf(args)!== -1);
            } else {
                console.log("caseInSensitive")
                return items.filter(item=> item.givenName.toLowerCase().indexOf(args.toLowerCase())!== -1);
            }
        }
        console.log("else")
        return items;
    }

}

问题在于,管道无法正常工作,因为caseSensitive 是作为字符串而不是布尔值绑定的。

【问题讨论】:

  • @Downvoter 请解释一下

标签: angular typescript


【解决方案1】:

&lt;option&gt; 中的值是字符串,如果提供了其他类型,它们会被字符串化。如果您改用ngValue,则可以使用其他类型,ngModel 保留该类型。

  <select [(ngModel)]="caseSensitive">
    <option [ngValue]="false">false</option>
     <option [ngValue]="true">true</option>
   </select>

【讨论】:

  • [value] 属性绑定总是表现得像一个字符串,所以它不同于 [ngValue]
  • [value] 只是绑定到 &lt;option&gt; value 属性 developer.mozilla.org/en-US/docs/Web/HTML/Element/option ,它只处理字符串值。 ngValue 是一个处理任何值类型的 Angular 指令。
猜你喜欢
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2016-09-21
  • 2021-12-15
  • 1970-01-01
  • 2012-07-10
  • 2016-10-26
相关资源
最近更新 更多