Angularjs 从局部加载控制器

Angularjs 从局部加载控制器,angularjs,Angularjs,我希望在部分文件中动态加载控制器,以便更好地组织代码。通过我的,我发现如果我想使用script标记从partial加载控制器,我需要包括JQuery 然而,这些方法似乎只有在全局范围内声明我的控制器时才有效,即 function MainCtrl($scope) {} 如果我切换到使用controller.js中的模块 angular.module ("myApp").controller ("MainCtrl", function ($scope) {}); 这不再适用于错误消息 “参数'

我希望在部分文件中动态加载控制器,以便更好地组织代码。通过我的,我发现如果我想使用script标记从partial加载控制器,我需要包括JQuery

然而,这些方法似乎只有在全局范围内声明我的控制器时才有效,即

function MainCtrl($scope) {}
如果我切换到使用controller.js中的模块

angular.module ("myApp").controller ("MainCtrl", function ($scope) {});
这不再适用于错误消息 “参数'MainCtrl'不是函数,未定义”

下面是一个plunker来演示这一点

我怎样才能做到这一点

注意 我没有故意在index.html中包含controller.js。我想从partial.html加载控制器,因为它只在那里使用

编辑 在阅读了这个问题之后,我能够实现我想要的:


这似乎是一种支持延迟加载的简单方法。希望$controllerProvider.register方法可以通过angular.module.controller在将来的版本中公开,以支持延迟加载。

您可以使用自定义指令实现这一点,在指令中,您可以使用jquery getscript或jquery ajax调用加载脚本,指令将在加载部分时触发

您可能需要查看
[RequireJS][1]
它为您在运行时加载
.js
文件提供了一种简单有效的方法

对于动态控制器加载部分:您应该编写一个提供程序(服务),该提供程序公开了在angular应用程序运行时注册控制器的一些方法(查看angular docs中的
$controllerProvider


我建议你看看,因为它提到了如何完全定制你的应用程序,比如脚本加载和控制器注册等等。

你忘了在
中包含你的
,因为你声明
var-app
是你的模块,所以使用它
app.controller()
如果您想要更好的使用,请不要将其包含在partial中,查看诸如requirejsI之类的加载程序,包括partial.html中的脚本,这就是我的问题所在。我知道如果将脚本标记移动到index.htmlAgain,这是可行的。如果您想组织依赖项或文件,我不建议您使用诸如requirejs之类的脚本加载程序。如果我错了,请纠正我。但我认为即使使用require.js,如果不使用Angular公开$controllerProvider,您也无法实现延迟加载。因此,尽管require.js肯定有助于更好地组织依赖关系,但它不会直接解决这个问题。