2012-09-01 34 views
6

我試圖根據當前視圖更改頁眉。標題在ngView之外。這是可能的還是我需要把頭部放在視圖中?在AngularJS中,我可以使用ngSwitch之外的當前路由ngView

我的代碼看起來與此類似:

<div id="header"> 
    <div ng-switch on="pagename"> 
     <div ng-switch-when="home">Welcome!</div> 
     <div ng-switch-when="product-list">Our products</div> 
     <div ng-switch-when="contact">Contact us</div> 
    </div> 
    (a lot of unrelated code goes here)  
</div> 

<div id="content> 
    <div ng-view></div> 
</div> 

回答

1

似乎這將是標題和內容不同的控制器。控制器之間通信的最佳方式是服務。另一種方式 - 事件。 See Vojta answer

9

您可以注入$location服務並檢查$location.path()http://docs.angularjs.org/api/ng.$location

JS:

function Ctrl($scope, $location) { 
    $scope.pagename = function() { return $location.path(); }; 
}; 

HTML:

<div id="header"> 
    <div ng-switch on="pagename()"> 
    <div ng-switch-when="/home">Welcome!</div> 
    <div ng-switch-when="/product-list">Our products</div> 
    <div ng-switch-when="/contact">Contact us</div> 
    </div> 
</div> 
10

給每個路線的名字,當你定義它。然後將$ route注入控制器,然後讓控制器將其發佈到當前範圍中。然後你可以綁定ng-switch到$ route.current.name

1

解決這個問題的一個很好的方法是在你的控制器中注入$ route,然後用它來獲取當前的路由名。

app.controller('YourController', function($scope, $route){ 
    $scope.pagename = $route.current.$$route.name; 
}); 

而且你必須命名您的路線如下所示:

app.config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider. 
     when('/product-list', { 
     templateUrl: 'views/product-list.html', 
     controller: 'ProductsController', 
     name: 'product-list' 
     }). 
     when('/home', { 
     templateUrl: 'views/home.html', 
     controller: 'HomeController', 
     name: 'home' 
     }). 
     otherwise({ 
     redirectTo: '/' 
     }); 
    }]); 

所以,當你加載路徑,控制器將讀取當前路徑名,並將其傳遞給視圖在你的頁面名變量。然後,視圖會將其選中並根據需要顯示正確的視圖。

希望它有幫助:)

相關問題