Невозможно подойти к перечислению Typcript в HTML
Я сделал перечисление с TypScript для использования в MyService.service.ts MyComponent.component.ts и MyComponent.component.html.
export enum ConnectionResult {
Success,
Failed
}
Я могу легко получить и сравнить определенную переменную enum из MyService.service.ts:
this.result = this.myService.getConnectionResult();
switch(this.result)
{
case ConnectionResult.Failed:
doSomething();
break;
case ConnectionResult.Success:
doSomething();
break;
}
Я также хотел использовать перечисление для сравнения в моем HTML с помощью инструкции * ngIf:
<div *ngIf="result == ConnectionResult.Success; else failed">
<img src="../../assets/connection-success.png" height="300px" class="image-sign-style" />
</div>
<ng-template #failed>
<img src="../../assets/connection-failed.png" height="300px" class="image-sign-style" />
</ng-template>
Код компилируется, но браузер дает мне ошибку:
Невозможно прочитать свойство неопределенного
Со следующей строкой ошибки html:
Кто-нибудь знает, почему невозможно перечислить перечисление?
Ответы
Ответ 1
Область применения шаблона ограничена членами экземпляра компонента. Если вы хотите сослаться на что-то, это должно быть доступно там
class MyComponent {
get connectionResult() { return ConnectionResult; }
}
тогда вы можете использовать
*ngIf="connectionResult.Success"
Смотрите также Angular2 доступ к глобальным переменным из шаблона HTML
Ответ 2
Вы должны будете записать его следующим образом в файле .ts
.
enum Tenure { day, week, all }
export class AppComponent {
tenure = Tenure.day
TenureType = Tenure
}
И теперь в html вы можете использовать это как
*ngIf = "tenure == TenureType.day ? selectedStyle : unSelectedStyle"
Надеюсь, теперь это станет более ясным. :)
Ответ 3
Вы можете просто добавить enum к своему компоненту как свойство и использовать то же имя enum (Quarters) в своих шаблонах:
enum Quarters{ Q1, Q2, Q3, Q4}
export class AppComponent {
quarter = Quarters.Q1
Quarters = Quarters
}
В вашем шаблоне
<div *ngIf="quarter == Quarters.Q1">I=am only visible for Q1</div>
Причина, по которой это работает, заключается в том, что новое свойство в основном такого типа:
TileType: typeof TileType