如何在angular2&typescript项目中更改身体的类别

TyF*_*ude 3 typescript angular

我的登录页面和应用程序中的其他页面具有不同的类,因此在用户登录后,我需要更改body元素的类。在这里,我试图做到这一点。

index.html

<body [ngClass]="{
  'dashboard site-navbar-small' :isAuthenticated,
  'login-form login-form-second page-login-second' :!isAuthenticated
}">
  <app-root>Loading...</app-root>
Run Code Online (Sandbox Code Playgroud)

login.component.ts

export class LoginComponent {
  @HostBinding('class.login-form.login-form-second.page-login-second')
  siteNavbarSmallClass = false;
  constructor(private auth:Auth){
    this.siteNavbarSmallClass=this.auth.authenticated();
  }
}
Run Code Online (Sandbox Code Playgroud)

app.component.ts

 export class AppComponent {
  @HostBinding('class.dashboard.site-navbar-small')
  dashboardClass = false;
  constructor(private auth:Auth){
      this.dashboardClass=this.auth.authenticated();
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试将ngClass指令绑定到isAuthenticated字段..但我不受影响。我听说我们无法通过ts更改body元素,但是我该如何处理呢?

Dev*_*nsh 5

一种方法是<body>使用bodyas 选择器使标签成为 app 元素,并使用主机绑定来更新 app 元素类。

@Component({
   selector: 'body',
   host:     {'[class.someClass]':'someField'}
})
export class AppComponent implements AfterViewInit {
  someField: bool = false;
  // alternatively to the host parameter in `@Component`
  // @HostBinding('class.someClass') someField: bool = false;

  ngAfterViewInit() {
    someField = true; // set class `someClass` on `<body>`
  }
}
Run Code Online (Sandbox Code Playgroud)


Gün*_*uer 5

<app-root>不支持外部绑定。

你可以做的就是用selector: 'body'AppComponent

@HostBinding('class.dashboard')
dashboardClass = false;

@HostBinding('class.site-navbar-small')
siteNavbarSmallClass = false;

...
Run Code Online (Sandbox Code Playgroud)

然后将属性设置为true以添加类。

要不就

document.body.classList.add('dashboard');
Run Code Online (Sandbox Code Playgroud)