【问题标题】:Angular2 Styles are not applied without ViewEncapsulation.None没有 ViewEncapsulation.None 不会应用 Angular2 样式
【发布时间】:2017-02-24 05:35:03
【问题描述】:

我将primeng 用于数据表组件,但问题是关于角度样式。我有以下模板:

<p-dataTable [value]="values">
    <p-column *ngFor="let column of columns;"
              [header]="column.name"
              [field]="column.field"
              styleClass="{{getColumnCssClasses(column)}}"
             // [styleClass]="getColumnCssClasses(column)" tried this way also
             >
    ...
    </p-column>
  </p-dataTable>

所以,p-columnstyleClass 指令,我可以在其中添加自己的 css 类。

getColumnCssClasses(column) {
   if(column.isToggle) {
      return 'toggle-column';
   }
}

CSS:

.togggle-column {
    width: 50px;
}

结果,我看到我的类应用正确,但样式应用不正确。 我在head 标签中看到了样式:

<style>.toggle-column[_ngcontent-nyw-32] {
  width: 55px;
}</style>

我知道问题是 Angular 将 [_ngcontent-nyw-32] 添加到我的 css 类中,但在 html 中我只有 toggle-coumn。我知道我可以使用encapsulation: ViewEncapsulation.None 修复它,但我不想这样做。为什么绑定不能正常工作?

【问题讨论】:

    标签: angular primeng


    【解决方案1】:

    您可以尝试使用原生指令 ngClass 代替 p-column 中的 styleClass

      <p-dataTable [value]="values">
        <p-column *ngFor="let column of columns;"
                  [header]="column.name"
                  [field]="column.field"
                  [ngClass]="{{getColumnCssClasses(column)}}"
                 >
        ...
        </p-column>
      </p-dataTable>
    

    如果这不起作用,您可以将其添加到容器中

    :host  /deep/   .toggle-column { width: 55px; }
    

    您可以通过阅读这篇博文Angular — Advanced Styling Guide (v4+) 找到更多选项。

    【讨论】:

    • 是的,我尝试过原生 ngClass,应用了该类,但没有应用样式,并且在我看到的 html 中:&lt;td class="toggle-column" ng-reflect-klass="toggle-column"。无论如何,该类不包含[_ngcontent-XXXX]。我稍后会尝试 :host 。感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2019-08-17
    • 2020-01-15
    相关资源
    最近更新 更多