2015-07-02 71 views
0

我使用angular.js。我有一個項目列表,當我點擊其中一個應該顯示一個特定的模板。爲什麼手動重新加載頁面時控制器沒有被調用?以及如何解決它?

如果我使用從根(index.html)的應用程序,但點擊一個項目後,如果我重新加載頁面(修改後的URL),一切都有效,即使我嘗試再次點擊相同的項目。

這裏是我的代碼:

config.js

app.config(['$routeProvider', function($routeProvider) { 
    $routeProvider 
     .when('/building/:buildingName', { 
      templateUrl: 'views/building.html', 
      controller: 'buildingCtrl' 
     }) 
     .otherwise({redirectTo: '/'}); 
}]); 

townCtrl.js

app.controller('townCtrl', ['$scope', '$routeParams', 
    function ($scope, $routeParams) {  
     $scope.buildingsList = [{ 
      name: 'Foo', 
      route: 'foo' 
     }, { 
      name: 'Bar', 
      route: 'bar' 
     }]; 

     $scope.select = function (item) { 
      $scope.selected = item; 
     }; 
    } 
]); 

buildingCtrl.js

app.controller('buildingCtrl', ['$scope', '$routeParams', 
    function ($scope, $routeParams) {   
     console.log($routeParams.buildingName); 
    } 
]); 

town.html

<div class="row" ng-controller="townCtrl"> 
    <div class="col-md-3"> 
     <div class="list-group"> 
      <a ng-repeat="building in buildingsList" 
       ng-click="select(building)" 
       ng-class="{active: selected === building}" 
       class="list-group-item" 
       ng-href='#/building/{{building.route}}'> 
       {{building.name}} 
      </a> 
     </div> 
    </div> 
    <div class="col-md-9"> 
     <div ng-view></div> 
    </div> 
</div> 

所以,當我點擊項目的URL成爲〜/#/建築/富,buildingCtrl顯示在控制檯和建築 '富' .html在頁面中正確呈現。

但如果我重裝手動(即F5)的頁面,網址撐不顯示相同,building.html和最壞的打算,如果我點擊「富」,沒有什麼附加...

你能幫我解決這個問題嗎?我可能在路線上錯過了一些東西。

回答

1

看起來您使用townCtrl兩次 - 一次爲town.html和一次building.html ...

也許你介紹另一個控制器用於建築物或者只是使用的模板沒有一個(如果您不需要建築模板的控制器)。

BTW:有一個UI的SREF屬性簡化連接https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-sref

+0

謝謝您的回答。確實townCtrl被調用了兩次。我更新我的代碼和我的問題。控制器僅在控制檯中顯示數據,但我將稍後使用$ scope作爲模板。我有兩個不同的控制器相同的問題。感謝分享angular-ui-router btw,我會看看它;) – Alex

相關問題