Typescript の enum は、Angular2 の ngSwitch ディレクティブと自然に一致するようです。しかし、コンポーネントのテンプレートで enum を使用しようとすると、「... で未定義のプロパティ 'xxx' を読み取ることができません」というメッセージが表示されます。コンポーネント テンプレートで enum 値を使用するにはどうすればよいでしょうか?
これは、列挙型 (ngFor) のすべての値に基づいて HTML 選択オプションを作成する方法とは異なることに注意してください。この質問は、列挙型の特定の値に基づく ngSwitch に関するものです。列挙型へのクラス内部参照を作成するという同じアプローチが表示されます。
ベストアンサー1
コンポーネントクラスで列挙型への参照を作成し(最初の文字を小文字に変更しただけです)、その参照をテンプレートから使用することができます(プランカー):
import {Component} from 'angular2/core';
enum CellType {Text, Placeholder}
class Cell {
constructor(public text: string, public type: CellType) {}
}
@Component({
selector: 'my-app',
template: `
<div [ngSwitch]="cell.type">
<div *ngSwitchCase="cellType.Text">
{{cell.text}}
</div>
<div *ngSwitchCase="cellType.Placeholder">
Placeholder
</div>
</div>
<button (click)="setType(cellType.Text)">Text</button>
<button (click)="setType(cellType.Placeholder)">Placeholder</button>
`,
})
export default class AppComponent {
// Store a reference to the enum
cellType = CellType;
public cell: Cell;
constructor() {
this.cell = new Cell("Hello", CellType.Text)
}
setType(type: CellType) {
this.cell.type = type;
}
}