[英]Angular UI-router, controller is undefined
我是AngularJS框架的新手,我試圖使用標准路由器遷移測試項目以使用UI路由器,但出現以下錯誤:
Error: [ng:areq] Argument 'mainCtrl' is not a function, got undefined
到目前為止,我所做的是:
控制器:
// mainCtrl.js
angular.module("sm-web")
.controller('mainCtrl',['$scope',
function($scope) {
...
}]);
路由器:
angular.module('sm-web', ['ui.router'])
.config(['$stateProvider', '$urlRouterProvider', function( $stateProvider, $urlRouterProvider ) {
$urlRouterProvider.otherwise('root');
$stateProvider
.state('root', {
url: '',
templateUrl: path + 'ng/sm/view/main.html',
controller: 'mainCtrl'
});
}]);
指數:
<body ng-controller="mainCtrl">
<main-menu></main-menu>
<div class="container">
<div ui-view></div>
</div>
</body>
當我使用標准路由器而不是UI路由器時,此方法有效。 有人知道我在做什么錯嗎?
似乎您在聲明事物的順序方面遇到了問題。 為了聲明模塊“ sm-web”,您需要執行以下操作:
angular.module('sm-web', ['ui.router']);
請注意,第二個數組參數的存在是告訴Angular您正在聲明模塊(例如,創建一個新模塊)。 當您省略第二個參數時,您將檢索先前聲明的模塊。
因此,請記住這一點,看看代碼中的所有內容如何組合在一起:
執行上述所有操作之前,您需要在某個位置創建模塊。 創建模塊后,然后在模塊上注冊控制器。 最后,在定義了控制器的情況下,您可以注冊使用控制器的狀態。
有太多方法可以解決此訂購問題,因此,我將不再提出任何建議。 這取決於代碼所在的文件以及在index.html
加載這些文件的順序。
為了避免出現問題,請通過以下代碼更改代碼:
// mainCtrl.js
angular.module("sm-web")
.controller('mainCtrl',['$scope',
function($scope) {
...
}]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.