【问题标题】:Angular 2 set dynamic styles from component (background image: linear gradient)Angular 2 从组件中设置动态样式(背景图:线性渐变)
【发布时间】:2016-10-23 07:36:09
【问题描述】:

我正在使用 angular2 rc2 和打字稿。 我有一个 angular 2 组件,其中使用属性设置颜色。

在组件内部,颜色转换为 rgba 并创建了线性渐变,我想将其设置为模板。

import { Component, Input, OnInit } from "@angular/core";

@Component({
      selector: "horizontalrule",
      template : `<div class="fadding-ruller-holder">
                        <hr class="fadding-ruller" [style.background-image]="BackgroundImage">
                  </div>`,
})

export class HorizontalRule implements OnInit
{
      @Input() color:string;

      public BackgroundImage:string;

      constructor(private utils:UtilsService) 
      {

      }

      ngOnInit()
      {
            //color: #FF0000

            let rgba:string = this.ConvertHexToRGBA(this.color, 0.7);

            //rgba: rgba(255,0,0,0.7)

            this.BackgroundImage = "-webkit-linear-gradient(left, rgba(0, 0, 0, 0)," + rgba + "rgba(0, 0, 0, 0))"
                                    + "-o-linear-gradient(left, rgba(0, 0, 0, 0),"   + rgba + "rgba(0, 0, 0, 0))"
                                    + "linear-gradient(to right, rgba(0, 0, 0, 0),"  + rgba + "rgba(0, 0, 0, 0))";
      }

      public ConvertHexToRGBA(hex:string, opacity?:number):string
      {
            opacity = opacity || 1;

            opacity < 0 ? opacity = 0 : opacity = opacity;
            opacity > 1 ? opacity = 1 : opacity = opacity;

            hex = hex.replace('#','');

            let r = parseInt(hex.substring(0, 2), 16);
            let g = parseInt(hex.substring(2, 4), 16);
            let b = parseInt(hex.substring(4, 6), 16);

            return 'rgba(' + r + ',' + g + ',' + b + ',' + opacity +')';

      }
}

这不起作用。有些东西失败了,甚至没有在 html 中设置渐变。这是正确的做法吗?

【问题讨论】:

标签: css typescript angular styles components


【解决方案1】:
import {DomSanitizationService} from '@angular/platform-browser';

class HorizontalRule implements OnInit {
  transform(style) {
    return this.sanitizer.bypassSecurityTrustStyle(style);
  }

  ngOnInit() {
        //color: #FF0000

        let rgba:string = this.transform(this.ConvertHexToRGBA(this.color, 0.7));

        //rgba: rgba(255,0,0,0.7)

        this.BackgroundImage = this.transform("-webkit-linear-gradient(left, rgba(0, 0, 0, 0)," + rgba + "rgba(0, 0, 0, 0))"
                                + "-o-linear-gradient(left, rgba(0, 0, 0, 0),"   + rgba + "rgba(0, 0, 0, 0))"
                                + "linear-gradient(to right, rgba(0, 0, 0, 0),"  + rgba + "rgba(0, 0, 0, 0))";)
  }
}

【讨论】:

  • 我不得不做一些调整,但这是正确的,我们需要使用 DomSanitizationService。如果我只有线性渐变,它可以工作。如果我添加其他前缀它不起作用...
  • 很高兴听到你想通了 :) 有些东西在默认情况下被列入白名单,而另一些则需要明确的清理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
相关资源
最近更新 更多