通过提供商注册AngularJS组件

时间:2014-02-17 19:14:43

标签: angularjs routing

我正在实施基于Dan Wahlin's article的Angular / RequireJS路由解决方案。

在文章中,Dan在他的app对象上创建了以下注册快捷方式:

app.register =
{
    controller: $controllerProvider.register,
    directive: $compileProvider.directive,
    filter: $filterProvider.register,
    factory: $provide.factory,
    service: $provide.service
};

当我使用这些时,我可以通过RequireJS调用正确地注册和引用我的控制器,但是如果我使用传统的app.controller()angular.module('myApp').controller()语法,那么Angular找不到它们,我会收到错误来自路由器。

如何使用上述方法定义控制器,指令等不同,为什么它与RequireJS一起使用,而更传统的方法不适用?

有什么想法吗?

谢谢, -Nate

1 个答案:

答案 0 :(得分:0)

由于控制器是动态添加的,所以事情必须从"规范" (不幸)。主要区别在于控制器被包装在RequireJS模块中,被动态下载,然后被注册。 $ controllerProvider.register允许动态注册。它绝对不是常规技术,但在这种情况下需要什么。这就是为什么" app" (将我们带到应用程序的AngularJS模块的RequireJS模块)传递给所有控制器模块。它公开了上面显示的控制器属性,它可以动态地处理注册"。

如果您动态下载控制器脚本然后使用常规技术(angular.module(' ..')。controller(..)),它将无法正确注册 - 在至少那是我最后一次尝试的情况。自从我尝试了几个月以来已经过了几个月,但我仍然认为同样的行为仍在那里。

最重要的是,当控制器(以及服务/工厂等其他项目)具有即时加载的脚本时#34;事情有所改变,你访问和注册这些项目的方式也改变了我们以前常常看到的正常方式。