angularjs 如何在Angular UI中设置折叠式标题的类/样式

pu82cl6c  于 2022-11-28  发布在  Angular
关注(0)|答案(3)|浏览(192)

我正在使用Angular UI在一个accordion中呈现littel数据库条目。在第一次尝试中,我使用了bootstrap,但是当我集成AngularJS视图时,accordion不再完全工作(空href...)。然后我用angular UI bootstrap one和默认模板替换了我的bootstrap accordion。
我的问题是,在引导版本中,我设法根据折叠式标题(我使用了ng-repeat指令,以及标题内的ng-style)对标题进行了风格化。我尝试对Angular UI做同样的事情,但即使是我的自定义类也无法呈现。
这个示例代码在bootstrap中运行得很好,但在ui. bootstrap accordion中就不行了:

accordion-group.accordion-groupLog(ng-repeat="item in data.entries | filter:search") 
   accordion-heading.accordion-headingLog(ng-style="{backgroundColor: styles[item.importance-1].bkcolor, color: styles[item.importance-1].color}")
         {{item.title}}   ({{item.importance}})

这里的目标是根据条目字段应用不同的样式(背景颜色和文本颜色)。此外,类accordion-headingLog用于调整可折叠面板的默认大小。
下面是呈现的代码:

<div class="accordion-groupLog accordion-group ng-scope" ng-repeat="item in data.entries | filter:search">
   <div class="accordion-heading">
      <a class="accordion-toggle ng-binding" ng-click="isOpen = !isOpen" accordion-transclude="heading">
......

我以为会是这样的:

<div class="accordion-groupLog accordion-group ng-scope" ng-repeat="item in data.entries | filter:search">
   <div ng-style="{backgroundColor: styles[item.importance-1].bkcolor}" class="accordion-heading accordion-headingLog" style="background-color: rgb(214, 24, 40);">

[编辑]我试着把accordion-headingLog类和ng-class属性放在一起,但是也不起作用。只是为了测试,我试着在accordion的主体内应用这个类和样式,效果很好。我认为accordionHeading指令不接受任何类或属性?那么如何在标题上动态应用样式呢???
[编辑]另一个尝试是建立我自己的模板。我可以将accordion-headingLog类应用到标题中,但如何设置可自定义的样式呢?我尝试使用ng样式并应用固定样式,但它不起作用。

script(type="text/ng-template", id="template/accordion/accordion-group.html").
    div.accordion-group
    div.accordion-heading.accordion-headingLog(ng-style="{background-color: #123456")
       a.accordion-toggle(ng-click="isOpen = !isOpen", accordion-transclude="heading") {{heading}}
    div.accordion-body(collapse="!isOpen")
       div.accordion-inner(ng-transclude)
t0ybt7op

t0ybt7op1#

Angular-UI的accordion有一个accordionHeading指令,允许您包含HTML。源代码中的示例:

// Use accordion-heading below an accordion-group to provide a heading containing HTML
// <accordion-group>
//   <accordion-heading>Heading containing HTML - <img src="..."></accordion-heading>
// </accordion-group>

因此,也许您可以这样做,有条件地应用您的自定义css:

<accordion-group>
<accordion-heading ng-class="{'custom-style': item.title }"> Your Title </accordion-heading>
</accordion-group>

下面是Angular-UI可折叠面板的源代码https://github.com/angular-ui/bootstrap/blob/master/src/accordion/accordion.js

lo8azlld

lo8azlld2#

我遇到了同样的问题,对我来说,快速的解决方案是更改CSS并在父“accordion-group”中添加一个类:

模板:

<accordion close-others="true">
    <accordion-group ng-repeat="elem in group.elements" is-open="isopen" ng-class="{'collapsed': !isopen}">
        <accordion-heading ng-click="isopen=!isopen">
            {{ elem.name }} 
        </accordion-heading>
        This content is straight in the template.
    </accordion-group>
</accordion>

HTML格式:

<accordion close-others="true">
    <div class="panel-group" ng-transclude="">
        <!-- ngRepeat: elem in group.elements -->
        <div class="panel panel-default ng-isolate-scope collapsed" ng-repeat="elem in group.elements" is-open="isopen" ng-class="{'collapsed': !isopen}">
            <div class="panel-heading">
                <h4 class="panel-title">
                <a href="" class="accordion-toggle" ng-click="toggleOpen()" accordion-transclude="heading">
                    <span class="ng-binding ng-scope"> 2001 </span></a>
                </h4>
            </div>
            <div class="panel-collapse collapse" collapse="!isOpen" style="height: 0px;">
                <div class="panel-body" ng-transclude="">
                    <accordion-heading ng-click="isopen=!isopen" class="ng-scope"></accordion-heading>
                    <span class="ng-scope">
                        This content is straight in the template.
                    </span>
                </div>
            </div>
        </div>
    </div>
</accordion>

CSS格式:

accordion>.panel-group .panel.collapsed .panel-heading .accordion-toggle {
    color: #478fca;
    font-weight: 400;
    background-color: #F9F9F9;
}

您也可以创建一个指令来更改子级的类,但我认为这不是最好的解决方案。

7fyelxc5

7fyelxc53#

刚刚处理了这个问题后,升级到最新版本的Angular ,引导程序等,这些相关的答案都没有完全回答这个问题imo。
我的经验是有两种主要的方法
1.然后替换可折叠组件及其子组件中的现有样式。
这种方式比较挑剔,可能需要更多的试验和错误来配置到您想要的规格。
HTML格式:

<accordion>
    <accordion-group heading="test" [panelClass]="'custom-class'"></accordion-group>
    <accordion-group heading="test2" [panelClass]="'custom-class'"></accordion-group>
</accordion>
  • 注意[panelClass] - Angular中额外的一组引号,否则会查找预置。您可以通过初始化一个包含所需自定义类名称的字符串变量并将其弹出来解决此问题。*

可能的CSS(可能不精确):

accordion-group::ng-deep .custom-class>a{background-color: black !important;}
accordion-group::ng-deep .custom-class>a:hover{color:white !important;}

1.追踪组件使用的特定类(你的浏览器的开发工具很有用),并根据需要使用常用的css规范(::ng-deep,!important,'〉'等)。例如,在折叠组中,每组的标题使用.btn,.btn-link等。
例如,如果要将折叠组标题中的默认下划线更改为仅在(悬停)事件上显示:
HTML格式:

<accordion>
    <accordion-group heading="test" id="blah"></accordion-group>
    <accordion-group heading="test2"></accordion-group>
</accordion>

CSS:

#blah .btn{text-decoration: none;}
#blah .btn:hover{text-decoration: underline;}

我发现方法#2更简单,它只需要对您使用的组件进行一点调查(可能不是一件坏事)。

相关问题