【问题标题】:same property multiple values in NgStyleNgStyle中的相同属性多个值
【发布时间】:2017-11-17 00:43:44
【问题描述】:

我正在使用 Angular 4 并尝试通过 ngStyle 将样式绑定到基于变量的我的 html 元素。但是,由于浏览器不兼容,我最终遇到了这个问题。

如何在不检查浏览器用户使用的浏览器的情况下将 3 种不同的样式绑定到同一个 css 属性?

例如,我必须将每个浏览器的属性“背景”绑定到 ngStyle:

"background": "-webkit-gradient(linear, "
+ "left top,"
+ "right top, " 
+ "color-stop(" + startval + ",#C5C5C5),"
+ "color-stop(" + startval + ", #EA0A8A), "
+ "color-stop(" + endval + ", #EA0A8A),"
+ "color-stop(" + endval + ", #C5C5C5)"
+ ")",
"background": "-ms-linear-gradient(left,"
+"#C5C5C5 0,"
+"#C5C5C5 "+startval+","
+"#EA0A8A "+startval+","
+"#EA0A8A "+endval+","
+"#C5C5C5 "+endval+","
+"#C5C5C5 1"
+")",

我尝试创建一个对象数组,并为同一属性的每种样式创建单独的对象,但无法成功绑定。

有什么想法吗?

【问题讨论】:

  • 你需要使用基于浏览器的背景属性吗?
  • startvalendval 是动态的吗?
  • 是的,startval 和 endval 是方法中的局部变量。

标签: javascript angular ng-style property-binding


【解决方案1】:

对于初学者,对象中不可能有重复的键以将其传递给ngStyle。 我会将样式数组的创建包装在一个方法中,并添加一些逻辑来检测浏览器。然后,返回创建的样式以避免在 HTML 中进行这样的内联样式计算。

我假设 startvalendval 是您组件上的吸气剂/属性。

isWebkit(): boolean {
    return window.navigator.userAgent.search(/webkit/i) > 0;
}

backgroundGradient(): string[] {
   let webkitGradient = `-webkit-gradient(linear, left top, right top, 
       color-stop(${ this.startval }, #C5C5C5),
       color-stop(${ this.startval }, #EA0A8A),
       color-stop(${ this.endval }, #EA0A8A),
       color-stop(${ this.endval }, #C5C5C5))`;

   let msGradient = `-ms-linear-gradient(left, #C5C5C5 0, 
       #C5C5C5 ${ this.startval },
       #EA0A8A ${ this.startval },
       #EA0A8A ${ this.endval },
       #C5C5C5 ${ this.endval },
       #C5C5C5 1)`;

   return isWebkit() && webkitGradient || msGradient;
}

【讨论】:

  • 谢谢,马蒂亚斯。那正是我所想。我只是暂时避免检查用户代理,但这就是我必须做的。
  • @guarinex 我错过了实现! [ngStyle]="{ background: backgroundGradient() }"。对此感到抱歉。
  • 没问题!我得到了它。非常感谢!
猜你喜欢
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2022-01-20
相关资源
最近更新 更多