2015-09-27 85 views
6

我知道這是一個常見問題,但我一直無法通過閱讀先前提問的問題找到解決方案。AngularJS找不到我的控制器

我實際上得到兩個錯誤,但第一個是關於角度不能找到我的控制器。 ?

http://errors.angularjs.org/1.4.2/ $噴油器/ NOMOD P0 = myApp.controllers

我的目錄結構如下所示:

. 
└── static 
    ├── index.html 
    ├── js 
    │   ├── app.js 
    │   └── controllers.js 
    ├── lib 
    │   └── angular-ui-router.min.js 
    └── partials 
     ├── view1.html 
     └── view2.html 

我的索引文件如下所示:

<html ng-app="myApp"> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Hello AngularJS</title> 
    </head> 
    <body> 
     <div ui-view></div> 
     <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.min.js"></script> 
     <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular-route.min.js"></script> 
     <script type="text/javascript" src="lib/angular-ui-router.min.js"></script> 
     <script type="text/javascript" src="js/controllers.js"></script> 
     <script type="text/javascript" src="js/app.js"></script> 
    </body> 
</html> 

我app.js文件如下所示:

(function(angular) { 

    var app = angular.module('myApp', ['ui.router', 'myApp.controllers']); 

    app.config(function($stateProvider) { 
     $stateProvider.state('view1', { 
      url: '/view1', 
      templateUrl: 'partials/view1.html', 
      controller: 'View1Controller' 
     }).state('view2', { 
      url: '/view2', 
      templateUrl: 'partials/view2.html', 
      controller: 'View2Controller' 
     }); 
    }).run(function($state) { 
     $state.go('view2'); 
    }); 

})(angular); 

我controller.js文件如下所示:

(function(angular) { 
    var app = angular.module('myApp.controllers'); 

    app.controller('View1Controller', function($scope) { 
     $scope.data = 'my view 1'; 
    }); 

    app.controller('View2Controller', function($scope) { 
     $scope.data = 'my view 2'; 
    }); 

})(angular); 

而且第二error這可能是相關的。

如上所述,angular無法找到我的控制器。有沒有人有關於我在做什麼錯誤的線索?請讓我知道是否需要粘貼更多的代碼。

我已經在github上分享了代碼,以防有人發現它更容易處理。

https://github.com/tonsV2/angular-ui.route/tree/master/src/main/resources/static

+0

努力改變裝載腳本的順序位置。文件'app.js'應該比'controllers.js'早加載。 – Niezborala

回答

7

在角angular.module()是setter和吸氣劑。據(通過@DanAtkinson's comment)的angular.module文檔:

傳遞一個參數檢索現有angular.Module,而 傳遞多個參數創建一個新的angular.Module。

消氣

var app = angular.module('myApp.controllers');使用模塊作爲吸氣劑。

由於尚未創建模塊myApp.controllers而失敗。

二傳手

要使用它作爲一個二傳手其更改爲

var app = angular.module('myApp.controllers', []); // note the [] 
+1

[docs](https://docs.angularjs.org/api/ng/function/angular.module)不會使此獲取/設置邏輯非常清晰,但在第一行中有以下語句: '傳遞一個參數會檢索一個已存在的angular.Module,而傳遞多個參數將創建一個新的angular.Module'。 –

+1

謝謝。我補充說。 –