Ich habe eine Navigationskomponente in meiner App, die mehrere Links zu verschiedenen Seiten hat, auf die über Routing zugegriffen wird. Ich möchte ein Navigationselement als "aktiv" anzeigen, wenn sich der Router derzeit auf derselben Seite befindet, auf die der Link verweist. Ich habe versucht, verschiedene Dinge, bis ich mit dem folgenden Code am Ende der dynamisch die CSS-Klasse setzt auf der aktuellen Route abhängig:Wie wird ein bedingtes Klassenattribut abhängig vom aktuellen Routing angewendet?
Vorlage:
<template>
<div>
<ul>
<li class.bind="overviewClass"><a href="#/batch/overview">Overview</a></li>
<li class.bind="completedJobsClass"><a href="#/batch/completed-jobs">Completed Jobs</a></li>
<li class.bind="jobDefinitionsClass"><a href="#/batch/job-definitions">Job Definitions</a></li>
</ul>
</div>
</template>
Ansichtsmodell:
import {inject} from 'aurelia-framework';
import {Router} from 'aurelia-router';
@inject(Router)
export class Navigation {
constructor(private router: Router){
}
get overviewClass(){
return this.isActive("overview") ? "active" : "";
}
get completedJobsClass(){
return this.isActive("completed-jobs") ? "active" : "";
}
get jobDefinitionsClass(){
return this.isActive("job-definitions") ? "active" : "";
}
isActive(routeName: string){
if(this.router.currentInstruction != null && this.router.currentInstruction.config.name == routeName){
return true;
}
return false;
}
}
Dieser Code in der Tat funktioniert wie erwartet. Mein Problem ist, dass ich eine dynamischere Lösung finden muss, weil diese Lösung nicht skaliert. Zur Zeit muss ich einen Getter für jedes Navigationselement hinzufügen, das ich implementieren muss.
Ich habe versucht, eine Funktion anstelle eines Getters zu verwenden, aber das Problem war in allen meinen Fällen, dass der Wert this.router.currentInstruction
null war.
Gibt es eine effiziente Möglichkeit, eine Funktion mit einem Parameter zu implementieren, so dass ich sie aus der Vorlage binden kann, ohne für jede Verknüpfung eine Funktion oder einen Getter hinzufügen zu müssen?
Vielen Dank für Ihre Hilfe.
Genau das habe ich gesucht. Erwähnenswert ist, dass Sie mit der Eigenschaft "href" auf die URL zugreifen können und der Anzeigename mit der Eigenschaft "title" angegeben werden kann. Die Eigenschaft "href" muss nicht manuell festgelegt werden. Sie ruft ihren Wert aus der Eigenschaft "route" ab, falls angegeben. Meine endgültige Lösung sieht so aus: '