angular - Angular 6中不同路线的不同身体背景颜色
问题描述
我正在制作一个有角度的管理面板。当用户打开面板时,它会检查用户是否已通过身份验证。如果没有,它将被重定向到登录页面。
每个面板和登录组件都有不同的正文背景颜色。问题是当角度将用户重定向到登录页面时,背景颜色不会改变。
我必须在encapsulation: ViewEncapsulation.None
任何地方使用。我不应该改变这一点。但万一我试图删除它,它仍然没有工作。我也尝试使用全局样式文件,但结果相同。
我有一些 plan-b 解决方案,但试图在这里找到最佳实践。
这些代码应该不是必需的,但这里是简化的代码:
// login.ts :
@Component({
selector: 'app-login',
templateUrl: './login.html',
styleUrls: ['./login.scss'],
encapsulation: ViewEncapsulation.None
})
.
// login.scss :
body {
background-color: #777;
}
和 :
// panel.ts :
@Component({
selector: 'app-panel',
templateUrl: './panel.html',
styleUrls: ['./panel.scss'],
encapsulation: ViewEncapsulation.None
})
export class PanelComponent implements OnInit {
ngOnInit() {
if (!this.auth.isLogin()) {
this.router.navigate(['/login']);
}
}
}
.
// panel.scss :
body {
background-color: #eee;
}
解决方案
您需要向body
元素添加额外的类并根据该类名称设置不同的颜色。你需要像这样使用ngAfterViewInit
和ngOnDestroy
生命周期钩子:
// login.ts :
ngAfterViewInit() {
document.querySelector('body').classList.add('login');
}
ngOnDestroy() {
document.querySelector('body').classList.remove('login');
}
那么您对该组件的样式将是:
// login.scss :
body.login {
background-color: #777;
}
当然对于面板组件:
// panel.ts :
ngAfterViewInit() {
document.querySelector('body').classList.add('panel');
}
ngOnDestroy() {
document.querySelector('body').classList.remove('panel');
}
和风格:
// panel.scss :
body.panel {
background-color: #eee;
}
推荐阅读
- php - 在我的表单验证中出现 _buildSchema 错误
- c - 包含 Unicode 字符的 Unicode 字符串始终为空
- python - 查询 sql 以使用 pandas 数据框
- vba - 通过 VBA 从 Powerpoint 表格单元格中获取单元格颜色
- swiftui - 如何将 ViewModifier 内容转换为预期类型?
- python - pandas 丢弃最后一组元素
- python - 干燥的 Pytest 夹具
- ios - 无法创建包含 google 加密折线的 Swift URL 对象
- javascript - 随机嵌入消息 discord.js 的问题 [已解决]
- flutter - 我的平面按钮就在我的文本字段下方,当键盘出现时它会被隐藏