【问题标题】:PrimeNg p-inputnumber cannot be styledPrimeNg p-inputnumber 无法设置样式
【发布时间】:2021-10-13 21:35:00
【问题描述】:

我在尝试实现 PrimeNg Inputnumber 元素时遇到了困难:https://www.primefaces.org/primeng/showcase/#/inputnumber

根据其文档,有几个属性可用于设置输入元素的样式,最值得注意的是 styleClass 和 inputStyleClass。不幸的是,它们都不起作用,而是被完全忽略了。

component.html:

<p-inputNumber 
  inputStyleClass="form-control-inputnumber" [(ngModel)]="subwinFld.orderAdd.doubleVal">
</p-inputNumber>

全局样式.css

.form-control-inputnumber {
  background:red;
  width: 100%;
}

我之前已经使用并成功地设置了其他 primeNg 元素的样式,使用完全相同的策略,例如 p-calendar 元素。但是,这里它完全忽略了属性。

我做错了什么?

【问题讨论】:

    标签: css angular primeng styling


    【解决方案1】:

    缺少样式的原因是组件的打字稿中的运行时错误,这阻止了 DOM 的正确编译。 我认为这无关紧要,因为它们根本不应该相关,但它们(不知何故)是相关的。由于其他人可能有同样的错误假设,我将这个问题留在这里,而不是删除它。

    【讨论】:

      【解决方案2】:

      尝试添加:host ::ng-deep

      样式是有作用域的,没有嵌套继承。

      :host ::ng-deep .form-control-inputnumber {
        background:red;
        width: 100%;
      }
      

      styleClass 是将类置于 PrimeNG 组件第一级的属性。

      inputStyleClass 是将类放在此特定组件的输入本身上的属性。

      我经常要玩styleClass的样式封装,所以我相信inputStyleClass也是一样

      关于 ::ng-deep 弃用的消息

      是的,它肯定已被弃用。公平地说,还有一个替代方案。但另类的对手是巨大的,在我看来,大局是最糟糕的。

      您可以通过更改组件中的 ViewEncapsulation 来使其工作:

      encapsulation: ViewEncapsulation.None

      如下

      @Component({
        selector: '',
        template: '',
        styles: [''],
        encapsulation: ViewEncapsulation.None  // Use to disable CSS Encapsulation for this component
      })
      

      Reference 1 about alternatives and reasons of deprecation

      Reference 2 about alternatives of ::ng-deep

      选择权在你手中,但就我而言,我会继续将此方法与 primeNG 等第三方库一起使用,因为没有真正的替代方案。

      您可以选择将您的样式设为全局样式或将您的样式设为范围。

      为了第三方库的使用而终止封装,在我看来这是一个矫枉过正的过程。

      通过将 ViewEncapsulation 设为 none,您就放弃了样式封装,因此请注意它。

      【讨论】:

      • 感谢您的回答。不幸的是,根据 Angular.io 的文档,不推荐使用 ::ng-deep
      • @DanielMethner 除了禁用 Angular 的 ViewEncapsulation 之外,没有任何适当的解决方案,它已被弃用。 stackoverflow.com/questions/47024236/…
      • @DanielMethner 我添加了一个替代方案,让您无需::ng-deep 也能做到这一点,但我真的不建议您采用这种方式。我觉得 ViewEncapsulation.NONE 是一个可以杀死苍蝇的火箭筒。但至少它没有被弃用。 ::ng-deep 没有其他选择,甚至已弃用,如果您想要我的观点,这是处理您的问题的最干净的方法
      猜你喜欢
      • 1970-01-01
      • 2020-12-15
      • 2021-11-21
      • 2021-11-04
      • 2020-11-06
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多