Angular 2有条件地添加类

Int*_*eep 2 javascript ng-class angular

我的目标是根据具有Angular 2的组件布尔值来设置或删除类.例如:isRed = true> add class"red",如果isRed = false> remove class"red".怎么可能?代码尝试:

isRed: boolean;

constructor() {
    $(document).scroll(function(){
        var scrollTop = $(this).scrollTop();
        if(window.location.hash) {

        } else{
            this.isRed = true;
        }
        if(scrollTop > 50) {
            this.isRed = true;
        }
        else  {
            this.isRed = false;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

和HTML:

[ngClass]="{red: isRed}"
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 8

最简洁的方式是恕我直言

[class.red]="isRed"
Run Code Online (Sandbox Code Playgroud)

更新

问题的原因function在于

 $(document).scroll(function(){
Run Code Online (Sandbox Code Playgroud)

它应该使用箭头功能

 $(document).scroll(() => {
Run Code Online (Sandbox Code Playgroud)

否则this回调内不会指向当前类,而是指向调用者.

我建议你尽量避免使用Angular2进行jQuery.请改用

class MyComponent {

  constructor(private elRef:ElementRef) {}

  isRed:boolean;

  @HostListener('document:scroll', ['$event'])
  onScroll(event:any) {
    var scrollTop = this.elRef.nativeElement.scrollTop;
    // or
    $(this.elRef.nativeElement).scrollTop();

    if(window.location.hash) {

    } else{
        this.isRed = true;
    }
    if(scrollTop > 50) {
        this.isRed = true;
    }
    else  {
        this.isRed = false;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)