Primeng 的 [styleClass] 带条件样式

Posted

技术标签:

【中文标题】Primeng 的 [styleClass] 带条件样式【英文标题】:Primeng's [styleClass] with conditional styling 【发布时间】:2020-05-11 02:39:00 【问题描述】:

我想在primeng 'p-overlayPanel' 元素上设置条件样式。我试过了:

    <p-overlayPanel [styleClass]="#(bean.comment) ? 'style1' : 'style2'">,但它不起作用。 [ng-class]="bean.comment ? 'style1' : 'style2'" - 这也不起作用。

Styleclass 只能在没有这样的条件的情况下工作:

<p-overlayPanel [styleClass]="style1"> // html文件

p-overlayPanel .style1.ui-overlay background-color: yellow; //css文件

虽然 [ng-class] 根本不起作用(但在原版 JS 元素上可以正常工作)。我错过了什么吗?我的问题如下:

    'ng-class' 是否不适用于 ngPrime 集合中的某些元素? 如何正确有条件地为p-overlayPanel 元素应用'styleClass'? 我正在使用 Angular 8。

【问题讨论】:

这个答案中列出了几个选项,其中一个应该可以工作:***.com/questions/35269179/…。在您的情况下,类型 4 将适用于您: [ngClass]="(step=='step1')?'my-class1':'my-class2'" 这能回答你的问题吗? Angular: conditional class with *ngClass @ulmas 这与primeng有关,以及如何更改这些元素的样式,例如添加样式类,然后您可以像我的回答一样更改它们???????? 【参考方案1】:

styleClass 接受字符串作为 css 类或类列表,并应用于已经拥有这些类列表的元素 overlaypanel ui-widget ui-widget-content ui-corner-all ui-shadow

所以如果你想改变背景颜色,你必须这样做

.style1.ui-overlaypanel
  background-color: red;


.style2.ui-overlaypanel
  background-color: green;

您必须将类添加到全局样式文件而不是组件样式文件,如果您使用style 属性,则该值将传递给 ngStyle 指令。

demo ?

? overlaypanel.ts

更新了?

您可以使用ngClass,但样式必须像下面的示例一样更改,因为现在css类将直接应用于元素。

.style1 .ui-overlaypanel
  background-color: red;


.style2 .ui-overlaypanel
  background-color: green;

demo ?

【讨论】:

【参考方案2】:

你可以像这样使用 [ngClass]:

<input pInputText [ngModel]="vendor.iban" name="pIban" #pIban="ngModel" (click)="some(pIban)" class="col-md-7 ui-inputtext ui-widget ui-state-default ui-corner-all "  [ngClass]="'errorVendor': vendor.iban=='' && pIban.touched"  />

【讨论】:

以上是关于Primeng 的 [styleClass] 带条件样式的主要内容,如果未能解决你的问题,请参考以下文章

角度2中的面包屑css问题

设置多个 styleClass 值

除非给出 ID,否则不呈现没有样式或 styleClass 的 panelGroup

为 PrimeNG 组件编辑 CSS

PrimeNG安装使用

如何使 PrimeNG 菜单栏组件工作?