2015-04-17 175 views
0

過去幾個星期我一直在學習Angular,並且我剛剛實現了麪包屑服務,但當我刷新頁面時,或者當我第一次導航到麪包屑存在的頁面。如果我回到主頁,然後返回到關於頁面,則碎屑按預期工作。角度麪包屑不工作在頁面刷新(ng路由)

請參閱this live example其當前狀態。

我相信這可能是我包括麪包屑的方式,並且我不瞭解這些活動背後的規則。

關於頁面有一個ng-include它抓住了麪包屑的模板:

<ul id="breadcrumb" ng-controller="crumbCtrl"> 
    <li><a href="#" title="Home">Home</a></li> 
    <li ng-repeat="breadcrumb in breadcrumbs.getAll()"> 
    <ng-switch on="$last"> 
     <span ng-switch-when="true">{{breadcrumb.name}}</span> 
     <span ng-switch-default><a href="{{breadcrumb.path}}">{{breadcrumb.name}}</a></span> 
    </ng-switch> 
    </li> 
</ul> 

我不想主頁出於顯而易見的原因,這就是爲什麼我已經包括只上顯示屑關於頁面。

有人能告訴我一種方法,我應該只將它隱藏在主頁上,或者請使用正確的部署方法。

而且,這裏是我的主要app.js:

var app = angular.module('dunnApp', ['ngRoute', 'services.breadcrumbs']); 

app.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider 
    // Home 
    .when("/", {templateUrl: "partials/home.html", controller: "PageCtrl"}) 
    // Pages 
    .when("/about", {templateUrl: "partials/about.html", controller: "PageCtrl"}) 

    // else 404 
    .otherwise("/404", {templateUrl: "partials/404.html", controller: "PageCtrl"}); 
}]); 


angular.module('dunnApp').controller('crumbCtrl', ['$scope', '$location', '$route', 'breadcrumbs', 
    function ($scope, $location, $route, breadcrumbs) { 
    $scope.location = $location; 
    $scope.breadcrumbs = breadcrumbs; 
    console.log("Crumbs online."); 
    }]); 

app.controller('PageCtrl', function (/* $scope, $location, $http */) { 
    console.log("Page Controller online."); 


}); 
+1

事件'$ routeChangeSuccess'沒有在第一頁加載時觸發 –

回答

3

這裏是你的代碼會發生什麼:

  • breadcrumbs服務未初始化直到crumbCtrl被初始化
  • crumbCtrl進入當breadcrumbs模板被包含到About頁面時的動作。
  • breadcrumbs 服務您收聽$routeChangeSuccess事件,但是一旦breadcrumbs服務初始化後,此「聽衆」就會激活,這會在導航到關於頁面一次後發生。

所以我建議你,放置$rootScope.$on('$routeChangeSuccess', ...)上它會從應用程序的啓動時運行的地方(例如,在app.run(function($rootScope)) { ... }),並加入到breadcrumb服務setBreadcrumbs()功能,這將在$routeChangeSuccess監聽器內部調用(breadcrumbs.setBreadcrumbs(result))。 Here是我建議的工作版本。

+0

這是非常有意義的,我會記住的。感謝您的幫助,謝謝。 – Aquious