Angular改变组件中样式(两种方法)

项目中遇到修改组件样式的情况,搜了半天资料基本只有vue和react的方法,什么/deep/,v-deep统统不起效,崩溃!

所以这里总结一下Angular的方法。

angular中想引入组件并修改组件内样式,有两种方法。

方法1:::ng-deep

注意,此方法在文档中写已弃用,但仍能生效(博主写下此博客的版本:Angular16)。

在这里插入图片描述
文档:文档

::ng-deep要注意以下几点:

  • 对应css文件不是全局的,即在ts中没有encapsulation: ViewEncapsulation.None
  • 注意优先级

对于第二点,如果想要对.noc-switch-group--true这个类修改样式,且原本的样式为:

.noc-switch-group .noc-switch-group--true {
    background-color: #53b38f;
}

那么以下代码不会生效:因为都是一个类选择器。

::ng-deep .noc-switch-group--true {
    background-color: #0b66e5;
  }

在这里插入图片描述
解决方法:使自己的优先级变高,如多加一个类选择器:.switchBlue是我们在调用组件的父级添加的类。

::ng-deep .switchBlue .noc-switch-group--true {
  background-color: #0b66e5;
}

这样也行(有什么区别?):

.switchBlue ::ng-deep .noc-switch-group--true {
  background-color: #0b66e5;
}

在这里插入图片描述

在这里插入图片描述

成功!

方法2:将css修改为全局,覆盖组件内的样式

在对应ts文件:

import { Component, ViewEncapsulation } from '@angular/core'; //引入ViewEncapsulation

@Component({
  selector: 'task-list',
  templateUrl: './task-list.component.html',
  styleUrls: ['./task-list.component.scss'],
  encapsulation: ViewEncapsulation.None, //将此css设置为全局
})

对应的样式就不会因为某个类不存在于代码中(只存在组件中)而不出现。

css可以直接写:

noc-switch .noc-switch-group--true {
  background-color: #0b66e5;
}

显然代码生效了。

在这里插入图片描述
这里也有优先级的问题,在使用组件的父级添加类,在css使用类选择器,提升优先级。

.switchBlue .noc-switch-group--true {
  background-color: #0b66e5;
}

成功!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,让我来回答您的问题。 首先,我需要明确一下您的问题。您是要我用Angular写一个简单的画面,并且用Angular的Test类写一个自动化测试的代码,对吗?如果是的话,那么我可以为您提供一些相关的信息和代码示例。 首先,让我们先来创建一个简单的Angular应用程序。您可以按照以下步骤操作: 1. 首先,您需要安装Node.js和npm。您可以通过以下命令来检查它们是否已成功安装: ``` node -v npm -v ``` 2. 然后,您需要全局安装Angular CLI。您可以通过以下命令来执行此操作: ``` npm install -g @angular/cli ``` 3. 接下来,您可以使用以下命令来创建一个新的Angular应用程序: ``` ng new my-app ``` 4. 在此过程,您将需要回答一些问题,例如您想要使用哪种样式表、是否要使用路由等。您可以根据自己的需求进行选择。 5. 创建成功后,您可以使用以下命令来启动应用程序: ``` cd my-app ng serve --open ``` 现在,您已经成功创建了一个新的Angular应用程序,并且可以在浏览器查看它。接下来,让我们来创建一个简单的画面。 假设您需要创建一个简单的登录画面,其包括用户名和密码字段。您可以按照以下步骤操作: 1. 打开src/app/app.component.html文件,并添加以下内容: ``` <div> <label>Username:</label> <input type="text" [(ngModel)]="username"> </div> <div> <label>Password:</label> <input type="password" [(ngModel)]="password"> </div> <button (click)="login()">Login</button> ``` 2. 在src/app/app.component.ts文件,添加以下代码: ``` import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { username: string; password: string; login() { // Add your login logic here } } ``` 3. 现在,您已经成功创建了一个简单的登录画面,并且可以在浏览器查看它。接下来,让我们来编写自动化测试代码。 假设您需要编写一个自动化测试,以确保在输入用户名和密码后单击“登录”按钮时,登录逻辑被正确执行。您可以按照以下步骤操作: 1. 打开src/app/app.component.spec.ts文件,并添加以下代码: ``` import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AppComponent } from './app.component'; describe('AppComponent', () => { let component: AppComponent; let fixture: ComponentFixture<AppComponent>; beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ AppComponent ] }) .compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(AppComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('should create the app', () => { expect(component).toBeTruthy(); }); it('should log in successfully', () => { component.username = 'testuser'; component.password = 'testpass'; const button = fixture.debugElement.nativeElement.querySelector('button'); button.click(); // Add your assertion logic here }); }); ``` 2. 在上面的代码,我们首先导入了AppComponent和相关的测试模块。然后,我们在beforeEach钩子创建了一个组件实例,并使用fixture.detectChanges()方法来触发变更检测。这将确保组件模板的任何绑定都被正确设置。 3. 然后,我们编写了两个测试用例。第一个测试用例检查组件是否能够成功创建,而第二个测试用例模拟了用户输入用户名和密码,并单击“登录”按钮的操作。您可以在这个测试用例添加自己的断言逻辑,以确保登录逻辑被正确执行。 4. 最后,您可以使用以下命令来运行测试代码: ``` ng test ``` 这将启动Karma测试运行器,并执行您编写的测试用例。如果所有测试用例都通过,您将看到绿色的检查标记,否则将显示红色的错误标记。 希望这些信息和示例代码能够帮助您。如果您有任何其他问题或疑问,请随时联系我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

karshey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值