/ / Cómo cambiar la clase de cuerpo en el proyecto angular2 y mecanografiado - angular, mecanografiado

cómo cambiar la clase de cuerpo en el proyecto angular2 y mecanografiado - angular, mecanografiado

Tengo diferentes clases para la página de inicio de sesión y otras páginas en la aplicación, por lo que, después de que el usuario haya iniciado sesión, debo cambiar la clase de elemento del cuerpo. Aquí estoy tratando de lograr esto ..

index.html

<body [ngClass]="{
"dashboard site-navbar-small" :isAuthenticated,
"login-form login-form-second page-login-second" :!isAuthenticated
}">
<app-root>Loading...</app-root>

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();
}
}

app.component.ts

 export class AppComponent {
@HostBinding("class.dashboard.site-navbar-small")
dashboardClass = false;
constructor(private auth:Auth){
this.dashboardClass=this.auth.authenticated();
}
}

Estoy tratando de enlazar la directiva ngClass al campo autenticado ... pero no me afecta. Escuché que no podemos cambiar el elemento del cuerpo a través de ts, ¿cómo puedo manejarlo de todos modos?

Respuestas

3 para la respuesta № 1

Encuadernaciones fuera <app-root> no son compatibles

Lo que puedes hacer es usar selector: "body" en ti AppComponent y

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

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

...

y luego establecer las propiedades en true para obtener las clases añadidas.

o solo

document.body.classList.add("dashboard");

3 para la respuesta № 2

Una forma es usar make the <body> etiqueta el elemento de la aplicación usando body como selector y usar enlace de host para actualizar las clases de elementos de la aplicación.

@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>`
}
}