当前位置: 首页 > 知识库问答 >
问题:

我如何在angular中为某些特定URL应用不同的(整页)背景?

吕宣
2023-03-14

我想用“login”作为URL在我的登录页面上应用不同的完整页面背景色。我在登录组件中使用了ngAfterViewInit()和renderr2。当我访问此页面并返回其他页面时,我的页面的所有背景都会像我的登录页面一样发生变化,但我只希望我的登录页面背景颜色发生变化。

使用Renderr2的我的登录组件

import {AfterViewInit, Component, ElementRef, OnInit, Renderer2} from '@angular/core';
import {Router} from '@angular/router';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.scss']
})
export class LoginComponent implements OnInit, AfterViewInit {

  constructor(private elementRef: ElementRef, private router: Router, private renderer: Renderer2) {
    this.renderer.setStyle(document.body, 'background-color', 'yellow');
  }

  ngOnInit() {
  }
}

使用AfterViewInit的我的登录组件

从“@angular/core”导入{AfterViewInit,Component,ElementRef,OnInit,Renderer2};从'@angular/Router'导入{Router};

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.scss']
})
export class LoginComponent implements OnInit, AfterViewInit {

  constructor(private elementRef: ElementRef, private router: Router) {
  }

  ngOnInit() {
  }

  ngAfterViewInit() {
this.elementRef.nativeElement.ownerDocument.body.style.backgroundColor = '#E7fff4';
    }
}

共有3个答案

齐晟
2023-03-14

删除渲染器和elementRef

要将其限制为组件,请将其添加到SCS中

:host{
   backgroundColor = '#E7fff4';
}
居乐池
2023-03-14

一种方法是使用AfterViewInit切换body类,使用共享函数切换OnDestroy。。。

export class LoginComponent implements AfterViewInit, OnDestroy {

  toggleBackgroundClass(): void {
    document.querySelector('body').classList.toggle('your-class-name');
  }

  ngAfterViewInit(): void {
    this.toggleBackgroundClass();
  }

  ngOnDestroy(): void {
    this.toggleBackgroundClass();
  }

}

当您的组件加载时,它将设置后台类,当您离开时,它将删除该类。您的CSS可以简单到:

body.your-class-name {
  background-color: #E7fff4;
}
阳俊德
2023-03-14

请做以下更改:

ngOnInit() {
  this.renderer.setStyle(document.body, 'background-color', 'yellow');
}

ngOnDestroy() {
  this.renderer.removeStyle(document.body, 'background-color');
  // or whatever color you want to change when user move out of login page
}
 类似资料:
  • 假设我当前所在的页面的URL为user/:id。现在,我从这一页导航到下一页:id/posts。 现在有一种方法,可以检查前面的URL是什么,即,。 下面是我的路线

  • 我在Google Play中的应用在一些设备上不可见,无论它们的Android版本如何。有什么方法可以通过Android Studio或Google Android开发人员控制台了解为什么我的应用程序与Brand X设备不兼容? 例如; > < li> 华为P9Android6.0可以 华为P9精简版Android6.0失败 我检查了之前输入的问题/答案,并了解原因可能是以下原因之一; andro

  • 使用CSRF保护,这样从其他网站发出的任何请求都不会影响我的网站造成伤害。在Spring安全csrf留档中说,csrf应用于放帖补丁删除请求。 但据我了解,登录/注册表单不需要csrf保护,因为它们已经需要用户名和密码形式的凭据,即使是从另一个网站发出这样的请求,也不会有任何伤害,因为用户只需登录即可。 但是由于登录通常是一个发布请求,csrf将在Spring默认情况下自动应用。这意味着我需要将c

  • 我想在Spring中创建一个页面,其中包含url http://myapp.com/sign-in?email=myemail@提供商。通用域名格式 是用户每次想要登录时通过电子邮件收到的一次性密码。 每当用户访问此页面时,我希望发生两件事: 检查提供的凭据是否正确。 如果是,则显示页面的超文本标记语言内容。 我已经完成了第一部分: 我需要如何更改代码才能显示主页(中的超文本标记语言文件),但前提

  • 问题内容: Angular的新手。我感觉好像缺少了一些明显的东西:我难道不应该能够轻松地运行以在同一html页面中分离AngularJs应用程序(模块)吗?像这样: Javascript: 这只会运行第一个模块,而第二个似乎不执行任何操作。我想这样做,以便可以为多个页面构建可重用的,封装的指令,而不必为它们的模块命名相同。 实时示例:http://plnkr.co/edit/cE6i3ouKz8S

  • 问题内容: 我正在尝试根据新的angular-ui-grid 3.0 rc12中的值为行上色,但我一直无法。以下代码用于以前的版本(ngGrid): 和相应的CSS: 这里的问题是表达式: 不再像在ngGrid中一样工作。关于如何在angular-ui-grid(ui-grid.info)中实现相同的任何猜测 非常感谢! 问题答案: 新的ui-grid具有cellClass的特殊属性: 看看他的柱