Невозможно подойти к перечислению 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>

Код компилируется, но браузер дает мне ошибку:

Невозможно прочитать свойство неопределенного

enter image description here

Со следующей строкой ошибки html:

enter image description here

Кто-нибудь знает, почему невозможно перечислить перечисление?

Ответы

Ответ 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