Pertama dan terpenting, masalah ini dapat dipecahkan dengan banyak cara. Cara ini mungkin bukan yang paling elegan, tapi itu bekerja dengan baik.
Berikut adalah solusi sederhana yang harus Anda tambahkan ke proyek apa pun. Anda bisa menambahkan "pageKey" atau properti lain saat mengkonfigurasi rute yang bisa Anda gunakan untuk mematikan. Selain itu, Anda dapat mengimplementasikan pendengar pada metode $ routeChangeSuccess dari objek $ route untuk mendengarkan keberhasilan penyelesaian perubahan rute.
Ketika pawang Anda menembak Anda mendapatkan kunci halaman, dan menggunakan kunci itu untuk menemukan elemen yang harus "AKTIF" untuk halaman ini, dan Anda menerapkan kelas AKTIF.
Perlu diingat Anda membutuhkan cara untuk membuat SEMUA elemen "DI AKTIF". Seperti yang Anda lihat, saya menggunakan kelas .pageKey pada item nav saya untuk mematikan semuanya, dan saya menggunakan .pageKey_ {PAGEKEY} untuk menyalakannya secara individual. Mengalihkan semuanya ke tidak aktif, akan dianggap sebagai pendekatan naif, berpotensi Anda akan mendapatkan kinerja yang lebih baik dengan menggunakan rute sebelumnya untuk membuat hanya item aktif yang tidak aktif, atau Anda dapat mengubah pemilih jquery untuk hanya memilih item aktif yang dibuat tidak aktif. Menggunakan jquery untuk memilih semua item yang aktif mungkin merupakan solusi terbaik karena ini memastikan semuanya dibersihkan untuk rute saat ini jika ada bug css yang mungkin ada pada rute sebelumnya.
Yang berarti mengubah baris kode ini:
$(".pagekey").toggleClass("active", false);
untuk yang ini
$(".active").toggleClass("active", false);
Berikut ini beberapa contoh kode:
Diberikan navbar bootstrap dari
<div class="navbar navbar-inverse">
<div class="navbar-inner">
<a class="brand" href="#">Title</a>
<ul class="nav">
<li><a href="#!/" class="pagekey pagekey_HOME">Home</a></li>
<li><a href="#!/page1/create" class="pagekey pagekey_CREATE">Page 1 Create</a></li>
<li><a href="#!/page1/edit/1" class="pagekey pagekey_EDIT">Page 1 Edit</a></li>
<li><a href="#!/page1/published/1" class="pagekey pagekey_PUBLISH">Page 1 Published</a></li>
</ul>
</div>
</div>
Dan modul sudut dan pengontrol seperti berikut:
<script type="text/javascript">
function Ctrl($scope, $http, $routeParams, $location, $route) {
}
angular.module('BookingFormBuilder', []).
config(function ($routeProvider, $locationProvider) {
$routeProvider.
when('/', {
template: 'I\'m on the home page',
controller: Ctrl,
pageKey: 'HOME' }).
when('/page1/create', {
template: 'I\'m on page 1 create',
controller: Ctrl,
pageKey: 'CREATE' }).
when('/page1/edit/:id', {
template: 'I\'m on page 1 edit {id}',
controller: Ctrl, pageKey: 'EDIT' }).
when('/page1/published/:id', {
template: 'I\'m on page 1 publish {id}',
controller: Ctrl, pageKey: 'PUBLISH' }).
otherwise({ redirectTo: '/' });
$locationProvider.hashPrefix("!");
}).run(function ($rootScope, $http, $route) {
$rootScope.$on("$routeChangeSuccess",
function (angularEvent,
currentRoute,
previousRoute) {
var pageKey = currentRoute.pageKey;
$(".pagekey").toggleClass("active", false);
$(".pagekey_" + pageKey).toggleClass("active", true);
});
});
</script>