Ivy编译后组件样式突然失效了怎么办?
升级到 Angular 16 启用 Ivy 编译器后,我一个子组件的样式完全不生效了,控制台也没报错。之前 ViewEncapsulation.Emulated 是默认的,应该没问题啊?
我试过改成 ViewEncapsulation.None,样式倒是出来了,但这不是我想要的 scoped 效果。组件模板和样式文件都没动过,就改了 angular.json 里启用 Ivy。
这是我的组件定义:
@Component({
selector: 'app-card',
templateUrl: './card.component.html',
styleUrls: ['./card.component.css'],
encapsulation: ViewEncapsulation.Emulated
})
export class CardComponent { }
解决办法:在CSS里把选择器写具体点,比如原来写的
.card { ... },改成app-card .card { ... }或者在模板根元素上加个class如.card-content { ... }。如果用了
:host ::ng-deep这种深度选择器,检查下是不是写错地方了,必须放在样式文件最前面才有效。