Angularjs 参数“subcroller”不是函数,未定义

Angularjs 参数“subcroller”不是函数,未定义,angularjs,Angularjs,我在app.js中声明了angular模块 var mainModule = angular.module('mainModule ', ["subModule"]); var subModule = angular.module('subModule ', []); 和一个JS文件subcroller.JS,其中定义了如下控制器 subModule .controller("subController", ['$scope', '$timeout',"$rootScope", functio

我在app.js中声明了angular模块

var mainModule = angular.module('mainModule ', ["subModule"]);
var subModule = angular.module('subModule ', []);
和一个JS文件subcroller.JS,其中定义了如下控制器

subModule .controller("subController", ['$scope', '$timeout',"$rootScope", function ($scope, $timeout, $rootScope) {
...
}]);
还有一个HTML文件subTemplate.HTML,如

//custom directive that will load the js file with ajax call
<loadscript src="js/controllers/subController.js"></loadscript>
<div data-ng-controller="subController">
...
</div>
我需要实现模块化的控制器声明

有人能帮忙吗


谢谢。

您正在延迟加载js,其中包含subcroller的定义,但是内联代码ng controller=subcroller甚至在响应返回之前就被执行了。。。这就是错误

<loadscript src="js/controllers/subController.js"></loadscript>
<div data-ng-controller="subController">
...
</div>

除非您为ng controller编写另一个指令,该指令仅在加载js文件后才转移内部元素,否则我看不出有任何方法可以避免此错误

我猜在subcroller.js中您缺少:var subModule=angular.module'subModule'。您必须获得对“子模块”的引用,否则将无法向其中添加内容。您可以将app.js中的子模块声明为全局变量,以使其在所有其他文件中都可用,但我不建议这样做。实际上,我错过了关于指令执行延迟加载的注释。到目前为止,angular不支持延迟加载。这意味着一旦应用程序开始运行,就不能向现有模块添加新的控制器、服务或其他内容。不过有很多方法可以解决这个问题,看看吧。当我面临同样的问题时,这就是我在项目中使用的。谢谢@YairTavor,理解angular js中延迟加载的优秀文章。我认为内联代码ng controller=subcroller不会在从指令加载subcroller.js文件之前执行,因为文件加载ajax调用是同步的。ajax调用永远不会同步
<loadscript src="js/controllers/subController.js"></loadscript>
<div data-ng-controller="subController">
...
</div>