我有一个基本上显示项目列表的组件,当用户点击特定项目时,然后执行操作。这是基本用例。为此,我有以下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。
答案 0 :(得分:0)
不,它不会为您投射任何数据。因为TypeScript不存在于运行时中,并且JavaScript不知道您在TypeScript代码中使用哪些类型+ TypeScript不会执行任何隐式类型转换/强制,并且它从未承诺这样做。
我真的不明白的基础是什么我的理解是在绑定函数的情况下Angular会相应地尝试将参数设置为函数所期望的类型:它永远不会在任何地方说出来
如果你想确保你的id是一个字符串,请使用简单的强制转换items.get(String(id))
。