代码之家  ›  专栏  ›  技术社区  ›  daniel

使用角度向现有类添加样式

  •  0
  • daniel  · 技术社区  · 6 年前

    我的应用程序中有许多现有类,我想通过代码(主题化功能)设置样式。

    e、 g。 <button class="mybutton">click</button>

    我需要这样的东西:

    <style>
        .mybutton{
            background-color: {{company?.buttonBackgroundColor}}!important;
        }
    </style>
    

    但这当然行不通。在不替换所有现有类的情况下,什么是好的解决方案?

    编辑:角度2+,而不是角度js。很抱歉

    3 回复  |  直到 6 年前
        1
  •  2
  •   nutic    6 年前

    我会建议一种不同的主题制作方法。创建*。css文件覆盖每个主题的必要规则,并在您想要切换主题时向DOM动态添加适当的样式表(请参见 How to load up CSS files using Javascript? 了解如何做到这一点)。

        2
  •  0
  •   daniel    6 年前

    对我来说,一个很好的解决方案是香草js:

    var selects = document.getElementsByClassName('mybutton')
            for (var i = 0, il = selects.length; i < il; i++) {
                selects[i].style.color = this.company.buttonForegroundColor;
    
            }
    
        3
  •  0
  •   Vinggui    6 年前

    在angular中,您可以访问元素并更改其类。您可以做更多的事情,比如更改它的属性,但我认为使用类更整洁。 然后,使用以下方法将类添加到DOM中:

    var myEl = angular.element( document.querySelector( '#div1' ) );
    myEl.addClass('alpha');
    

    您可以在这里找到一些想法: https://stackoverflow.com/a/30410490/5250103

    另外,另一个好的解决方案是使用条件类(ngClass): https://stackoverflow.com/a/16529903/5250103

    他解释道:

    ngClass指令将与任何计算truthy或false的表达式一起使用,这与Javascript表达式有点类似,但有一些不同,您可以阅读 here 。如果条件太复杂,则可以使用返回truthy或false的函数,就像您在第三次尝试中所做的那样。

    给出了一个示例 here

    ng-class="{'test': obj.value1 == 'someothervalue' || obj.value2 == 'somethingelse'}"
    

    我不打算窃取任何anwser,但正如评论中所建议的,这是经过编辑的,并引用了作者的话。

    我希望这有帮助!