Angular 5 - bind函数参数不正确的数据类型转换

时间:2018-02-15 18:57:44

标签: angular typescript angular5

我有一个基本上显示项目列表的组件,当用户点击特定项目时,然后执行操作。这是基本用例。为此,我有以下html模板。

template: `
  <ul class="list" *ngFor="let item of items">
   <li>(click)="onItemClick(item.id)"</li>
  </ul>
`,

我的打字稿代码:

export class Item {
    id: string;
    name: string;
}

export class ListComponent {

    let items: Map<string, Item>;

    public onItemClick(id: string) {
        console.log(id);
        let item = items.get(id); //this fails to find anything as id for some reason happens to be number.
        processItem(id)
    }

    private processItem(id: string) {
        //some work
    }
}

我已经通过html

中的以下内容解决了这个问题
 <li>(click)="onItemClick(''+item.id)"</li>

追加空字符串会强制Angular传递字符串而不是数字。但这似乎非常不方便。我的理解是在绑定函数的情况下,Angular将相应地尝试将参数设置为函数所期望的类型。

有没有人经历过这个? 我正在使用Angular 5.2.1和Typescript 2.4.2。

1 个答案:

答案 0 :(得分:0)

不,它不会为您投射任何数据。因为TypeScript不存在于运行时中,并且JavaScript不知道您在TypeScript代码中使用哪些类型+ TypeScript不会执行任何隐式类型转换/强制,并且它从未承诺这样做。

我真的不明白的基础是什么我的理解是在绑定函数的情况下Angular会相应地尝试将参数设置为函数所期望的类型:它永远不会在任何地方说出来

如果你想确保你的id是一个字符串,请使用简单的强制转换items.get(String(id))