2
votes

routerLinkActive route pour l'enfant et le parent

J'essaie d'appliquer ou de mettre en évidence des itinéraires de navigation pour ma barre de menus avec le code ci-dessous, ce que j'ai pu obtenir, c'est que je pourrais mettre en évidence le sous-menu, mais je n'ai pas pu mettre en surbrillance la barre de menus parent.

.class1{
    background-color: #007bff;
}


2 commentaires

où appliquez-vous la classe class1 ?


vous pouvez vérifier l'itinéraire actif? puis appliquer la classe en conséquence?


3 Réponses :


5
votes

Vous pouvez utiliser la variable de référence de modèle ( # ) pour obtenir une référence à routerLinkActive et ses propriétés, puis utiliser isActive .

<li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" 
        id="navbarDropdownMenuLink"
        data-toggle="dropdown" 
        style="color: white; cursor: pointer;"
        [ngClass]="{'class1': child1RLA.isActive || child2RLA.isActive}">  <!-- <-- Check if child routes are active -->
            Parent
    </a>
    <div class="dropdown-menu dropdown-menu-left"
        aria-labelledby="navbarDropdownMenuLink">
            <a class="dropdown-item" 
                [routerLink]="['app-child1']"
                [routerLinkActive]="['class1']"
                #child1RLA="routerLinkActive">          <!-- <-- Assign routerLinkActive reference to child1RLA variable -->
                    Child 1
            </a>
            <div class="dropdown-divider"></div>
                <a class="dropdown-item" 
                    [routerLink]="['app-child2']"
                    [routerLinkActive]="['class1']"
                    #child2RLA="routerLinkActive">      <!-- <-- Assign routerLinkActive reference to child2RLA variable -->
                        Child 2
                </a>
            </div>
    </div>
</li>


10 commentaires

Quoi? Ce n'est pas un "id angulaire". C'est une variable de référence de modèle. Comment pouvez-vous alors utiliser exportAs des directives? Et comment puis-je utiliser cette méthode exacte dans mon projet alors?


stackoverflow.com/questions/49746274/...


blog.angularindepth.com/…


ce n'est pas une directive? et probablement pour la même raison que les gens utilisent jquery dans des projets angulaires. ce n'est pas parce que vous pouvez faire quelque chose que vous devriez


Qu'entendez-vous par «pas une directive»? RouterLinkActive est une directive et contient exportAs: ' routerLinkActive ' que vous pouvez utiliser pour accéder à ses propriétés spécifiques à la directive. Lisez les exemples dans la documentation officielle.


Je n'ai jamais dit que RouterLinkActive n'était pas une directive, j'ai dit que # ..... n'est pas une directive, c'est un identifiant


As-tu lu ce que j'ai écrit? J'ai dit: ce n'est pas un "id angulaire". C'est une variable de référence de modèle. Quand ai-je dit que # ... est une directive. C'est une référence à une directive. Je vous demande de bien vouloir révoquer le vote défavorable car vous vous trompez totalement dans cette situation. Ce que j'offre dans la réponse est une utilisation valide à 100% .


mais comme # ... ne peut pas être dupliqué dans le même fichier html, c'est donc aussi un identifiant valide. comment êtes-vous certain que je suis le downvoter? et si vous lisez l'info-bulle, le vote est pour l'utilité, pas pour savoir si la réponse est considérée comme correcte ou non


Ce n'est pas dupliqué. # child1RLA et # child2RLA sont-ils dupliqués? Par souci d'utilité, j'utilise déjà cette méthode pour structurer mon menu principal dans mes projets. Peu importe ... J'en ai fini avec cette conversation.


Je n'ai pas dit qu'ils sont dupliqués, je viens de dire qu'ils ne peuvent pas être dupliqués et qu'ils sont également valablement utilisés comme identifiants. et pour moi, ses gens comme toi qui le ruinent à cause de mauvaises réponses



0
votes

il suffit de mettre le routerLinkActive sur l'élément parent, comme décrit ici: https: // angular. io / api / router / RouterLinkActive # description

<div routerLinkActive="active-link" [routerLinkActiveOptions]="{exact: true}">
  <a routerLink="/user/jim">Jim</a>
  <a routerLink="/user/bob">Bob</a>
</div>


0 commentaires

2
votes

Pour mettre en évidence un lien de menu latéral, ajoutez simplement routerLinkActive = "cssClassName" aux éléments d'ancrage comme:

<a routerLink="/profile" routerLinkActive="cssClassName"
            [routerLinkActiveOptions]="{ exact: true }">Profile</a>

cela mettra en évidence les deux liens si la route devient / profile ou / profile / details
Si vous ne voulez pas mettre en évidence la route parente lorsque l'utilisateur sélectionne les détails du profil dans ce cas, ajoutez simplement un attribut supplémentaire à la route parente, à savoir 'routerLinkActiveOptions' comme suit:

<a routerLink="/profile" routerLinkActive="cssClassName">Profile</a>
<a routerLink="/profile/details" routerLinkActive="cssClassName">Profile Details</a>

C'est le moyen le plus simple de mettre en évidence les liens du menu latéral lorsque le devient activé.


0 commentaires