CSS在我的角度组件中不起作用

Glo*_*Jim 17 css angular

我正在尝试创建一个简单的Angular4 Web应用程序,它将显示和X或O,具体取决于评级.我在我的网络应用程序中看不到X或O.

我的rating.component.ts文件中的CSS类不起作用.我的项目正在编译,因为我可以将文本添加到我的评级组件模板,它将显示在网页上,但我看不到想要呈现的CSS.

我的app组件:

import { Component } from '@angular/core';
@Component({
    selector: 'app-root',
    template: `
        <rating></rating>
     `,
  styleUrls: ['./app.component.css']
})

export class AppComponent {
}
Run Code Online (Sandbox Code Playgroud)

我的评分:

import { Component } from '@angular/core';

@Component({ 
    selector: 'rating', 
    template: `                   
        <i class="star" 
        [class.star-empty-icon]="rating < 1" 
        [class.star-full-icon]="rating >= 1" 
        (click)="onClick(1)">
        </i>
        <i class="star" 
        [class.star-empty-icon]="rating < 2" 
        [class.star-full-icon]="rating >= 2" 
        (click)="onClick(2)">
        </i>
    `
})
export class RatingComponent{ 
    rating = 0; 
    onClick(ratingValue){ 
        this.rating = ratingValue; 
    } 
}
Run Code Online (Sandbox Code Playgroud)

我的Css:

.star.star-full-icon{
    content:'X';
}
.star.star-empty-icon{
    content:'O';
}
Run Code Online (Sandbox Code Playgroud)

Hug*_*oro 38

我相信你遇到的问题是因为你在styleUrls父组件上声明了它,并且由于封装它们在子组件中不可用.您必须将其移至评级组件.

如果您希望将其保持在当前级别,则需要在评级组件上进行视图封装.

selector: 'rating',
encapsulation: ViewEncapsulation.None
Run Code Online (Sandbox Code Playgroud)

我相信你也在滥用内容css属性.您需要使用::before::after伪元素

.star.star-full-icon::after{
    content:'X';
}
.star.star-empty-icon::after{
    content:'O';
}
Run Code Online (Sandbox Code Playgroud)


Gün*_*uer 7

更新

::slotted 现在,所有新浏览器都支持该功能,并且可以与`ViewEncapsulation.ShadowDom一起使用

https://developer.mozilla.org/zh-CN/docs/Web/CSS/::slotted

原版的

您需要添加CSS(['./app.component.css'])RatingComponent,否则样式封装将阻止CSS的应用。

或者,您可以使用 ::ng-deep

::ng-deep .star.star-full-icon{
    content:'X';
}
::ng-deep .star.star-empty-icon{
    content:'O';
}
Run Code Online (Sandbox Code Playgroud)

ViewEncapsulation.NoneRatingComponent

但我建议您坚持使用第一种方法。

另请参阅https://blog.thoughtram.io/angular/2015/06/29/shadow

  • ng-deep 很快就会被弃用 :) (2认同)