我使用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和最壞的打算,如果我點擊「富」,沒有什麼附加...
你能幫我解決這個問題嗎?我可能在路線上錯過了一些東西。
謝謝您的回答。確實townCtrl被調用了兩次。我更新我的代碼和我的問題。控制器僅在控制檯中顯示數據,但我將稍後使用$ scope作爲模板。我有兩個不同的控制器相同的問題。感謝分享angular-ui-router btw,我會看看它;) – Alex