gpt4 book ai didi

angular - 在 Angular 2 中使用 @HostBinding 动态更改正文类

转载 作者:搜寻专家 更新时间:2023-10-30 22:01:42 26 4
gpt4 key购买 nike

我有一个基于 bootstrap3 的模板,我正在向它添加 angular2。

当更改从登录到应用程序其余部分的路由时,我需要更改正文的类,这是我的根组件选择器。

根组件

@Component({
selector: 'body',
directives: [ROUTER_DIRECTIVES],
templateUrl: '<router-outlet></router-outlet>'
})
export class AppComponent {

loggedIn = true;

@HostBinding('class.class1')
@HostBinding('class.home-page') homeBodyClasses = false;

@HostBinding('class.class3')
@HostBinding('class.login-page') loginBodyClasses = false;

constructor(private router: Router) { }

ngOnInit() {
if (!this.loggedIn) {
this.router.navigate(['SignIn']);
} else {
this.router.navigate(['Home']);
}
this.router.events.subscribe(event => {
console.log(event);
if (event instanceof NavigationEnd) {
if (event.urlAfterRedirects === '/SignIn') {
this.homeBodyClasses = false;
this.loginBodyClasses = true;
}else{
this.homeBodyClasses = true;
this.loginBodyClasses = false;
}
}
});
}

我订阅了路由器导航事件,但是当 url 更改时,尽管 @HostBinding 的值已更改,但什么也没有发生。

我尝试从子组件向 body 发射事件,并更改 body 标签以像这样捕获事件,但没有任何反应。

<body (eventName) = "changeBodyClass($event)"></body>

我做错了什么?我不明白什么时候应该更改@HostBinding 的值以使其生效。我正在使用 angular2.0.0-rc.5

最佳答案

你不能在 app-root 组件之外使用 @HostBinding

您可以使用 body 作为应用程序根组件的选择器,然后使用 @HostBinding 或者您可以使用 Renderer2修改 body 类。不建议使用 jquery 执行此操作。

使用 Renderer2 你可以做类似的事情

renderer.addClass(document.body, "myClass"); 

renderer.removeClass(document.body, "myClass"); 

关于angular - 在 Angular 2 中使用 @HostBinding 动态更改正文类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38924708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com