【问题标题】:How to add class only to the header of group of links如何仅将类添加到链接组的标题中
【发布时间】:2018-05-07 23:39:07
【问题描述】:

我有一个类似的列表:

<ul>
<li><a class="group-active">Group 1</a>
    <ul>
        <li routerLinkActive="active"><a [routerLink]="['/group1/page1']">Group 1 - Page 1</a>
        <li routerLinkActive="active"><a [routerLink]="['/group1/page2']">Group 1 - Page 2</a>
        <li routerLinkActive="active"><a [routerLink]="['/group1/page3']">Group 1 - Page 3</a>
    </ul>
</li>
<li><a>Group 2</a>
    <ul>
        <li routerLinkActive="active"><a [routerLink]="['/group2/page1']">Group 2 - Page 1</a>
        <li routerLinkActive="active"><a [routerLink]="['/group2/page2']">Group 2 - Page 2</a>
        <li routerLinkActive="active"><a [routerLink]="['/group2/page3']">Group 2 - Page 3</a>
    </ul>
</li>
<li><a>Group 3</a>
    <ul>
        <li routerLinkActive="active"><a [routerLink]="['/group3/page1']">Group 3 - Page 1</a>
        <li routerLinkActive="active"><a [routerLink]="['/group3/page2']">Group 3 - Page 2</a>
        <li routerLinkActive="active"><a [routerLink]="['/group3/page3']">Group 3 - Page 3</a>
    </ul>
</li>
</ul>

我需要: 当我选择其中一个元素时,更改类“组活动”(第一组)。他们的元素工作正常,但我无法将样式应用于相应的元素标题。

有什么想法吗?

谢谢

【问题讨论】:

    标签: angular router routerlinkactive


    【解决方案1】:

    这是个好问题。我可以看到很多人需要这个。

    将 routerLinkActive 导出到模板变量,然后使用isActive

    <li><a [class.group-active]="r1.isActive || r2.isActive || r2.isActive">Group 1</a>
        <ul>
            <li routerLinkActive="active" #r1="routerLinkActive"><a [routerLink]="['/group1/page1']" #r1="routerLinkActive">Group 1 - Page 1</a>
            <li routerLinkActive="active" #r2="routerLinkActive"><a [routerLink]="['/group1/page2']">Group 1 - Page 2</a>
            <li routerLinkActive="active" #r3="routerLinkActive"><a [routerLink]="['/group1/page3']">Group 1 - Page 3</a>
        </ul>
    </li>
    

    您还可以编写一个简单的指令,其中包含 boolean,如下所示:

    @Directive({
       selector: '[any-active]',
       exportAs 'anyActive'
    })
    public class AnyActiveDirective implements DoCheck {
      @ViewChildren(RouterLinkActive)
      public links: QueryList<RouterLinkActive>;
    
      public active: boolean = false;
    
      public constructor(private cdr: ChangeDetectorRef) {
      }
    
      public ngDoCheck() {
         if(this.links) {
            const active = !!this.links.find((link)=>link.isActive);
            if(this.active !== active) {
                thia.active = active;
                this.cdr.markForCheck();
            }
         }
      }
    }
    

    然后在模板中:

    <li any-active #group1="actActive"><a [class.group-active]="group1.active">Group 1</a>
        <ul>
            <li routerLinkActive="active"><a [routerLink]="['/group1/page1']" #r1="routerLinkActive">Group 1 - Page 1</a>
            <li routerLinkActive="active"><a [routerLink]="['/group1/page2']">Group 1 - Page 2</a>
            <li routerLinkActive="active"><a [routerLink]="['/group1/page3']">Group 1 - Page 3</a>
        </ul>
    </li>
    

    如果您的模板是静态的,您可以尝试第一种方法,但如果您的链接是使用 *ngFor 生成的,那么请尝试使用自定义指令。

    更新:

    我认为我之前的回答不是很好。如果routerLink任何 个子项处于活动状态,routerLinkActive 指令将设置 CSS 值。

    因此,这应该足以让它工作:

    <li><a routerLinkActive="group-active">Group 1</a>
        <ul>
            <li routerLinkActive="active"><a [routerLink]="['/group1/page1']">Group 1 - Page 1</a>
            <li routerLinkActive="active"><a [routerLink]="['/group1/page2']">Group 1 - Page 2</a>
            <li routerLinkActive="active"><a [routerLink]="['/group1/page3']">Group 1 - Page 3</a>
        </ul>
    </li>
    

    【讨论】:

    【解决方案2】:

    嗯, 我找到了我的解决方案,并与您分享。 Angular 非常聪明。只是我需要在相应的元素中添加相同的routerLinkActive:

    <li><a routerLinkActive="group-active">Group 1</a>
    ...
    <li><a routerLinkActive="group-active">Group 2</a>
    ...
    <li><a routerLinkActive="group-active">Group 3</a>
    ...
    

    我希望它可以帮助别人。

    【讨论】:

    • 不错!它监视所有内部路由器链接。我没想过要检查。
    猜你喜欢
    • 2017-08-15
    • 2011-03-03
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多