簡體   English   中英

角度UI路由器,控制器未定義

[英]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您正在聲明模塊(例如,創建一個新模塊)。 當您省略第二個參數時,您將檢索先前聲明的模塊。

因此,請記住這一點,看看代碼中的所有內容如何組合在一起:

  • 要聲明控制器,請檢索模塊“ sm-web”(通過保留第二個數組arg)。
  • 在配置路由器狀態時,您聲明一個新模塊“ sm-web”。 但是請注意,在聲明此新模塊后,您立即嘗試使用名為“ mainCtrl”的控制器注冊狀態-但這尚不存在。

執行上述所有操作之前,您需要在某個位置創建模塊。 創建模塊后,然后在模塊上注冊控制器。 最后,在定義了控制器的情況下,您可以注冊使用控制器的狀態。

有太多方法可以解決此訂購問題,因此,我將不再提出任何建議。 這取決於代碼所在的文件以及在index.html加載這些文件的順序。

為了避免出現問題,請通過以下代碼更改代碼:

// mainCtrl.js

angular.module("sm-web")
    .controller('mainCtrl',['$scope',
            function($scope) {
                ...
    }]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM