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