带有ngClass的Angular 2枚举

时间:2017-09-20 14:23:40

标签: html angular enums

您好我正在尝试使用带枚举的条件类。我之前在ngSwitchCase使用了html中的枚举,并且出现了与我现在相同的错误。当我添加一个名为enum的属性并将其分配给该枚举时,它将起作用。

工作示例:

                    <ng-container *ngFor="let column of columns" [ngSwitch]="column.dataType">
                    <td *ngSwitchCase="DataType.Text">{{getPropertyValue(row,column.propertyName)}}</td>
                    <td *ngSwitchCase="DataType.Date">date</td>
                    <td *ngSwitchCase="DataType.Number">number</td>
                    <td *ngSwitchDefault>default</td>
                </ng-container>

TS

private DataType = DataType;

无效:

            <span *ngClass="(column.sortType === SortType.Ascending)? 'privilege-grid-sortasc': (column.sortType === SortType.Descending)?'privilege-grid-sortdesc':'privilege-grid-sortnone'"></span> 

我也尝试了[ngClass] ="{'class-name': var === enum,...}"

TS

   private SortType = SortType;

错误消息:

  

无法阅读属性&#39; Ascending&#39;未定义的

2 个答案:

答案 0 :(得分:2)

我认为你的问题必须在其他地方。我使用带有枚举的[ngClass]绑定重新创建了你的场景,它适用于我:

[ngClass] ="{'class-name': var === enum,...}"

第二种情况下你的模板是在一个单独的.html文件而不是第一种情况吗?我遇到了模板文件无法读取组件文件上的私有变量的问题。

答案 1 :(得分:2)

我在这里找到了一个非常好的教程:https://coryrylan.com/blog/angular-tips-template-binding-with-static-types

总结语法是[ngClass] =&#34; {&#39; class-name&#39;:var === enum}&#34;:

@Component({
  selector: 'app-message',
  template: `
    <div class="message" [ngClass]="{
      'message--error': messageTypes.Error === type,
      'message--success': messageTypes.Success === type,
      'message--warning': messageTypes.Warning === type
    }">
      <ng-content></ng-content>
    </div>
  `
})
export class MessageComponent implements OnInit {
  @Input() type = MessageTypes.Default;
  private messageTypes = MessageTypes; //very important to declare here

  constructor() { }

  ngOnInit() { }
}