使用angularjs和requirejs动态加载控制器

时间:2015-09-23 18:19:27

标签: angularjs requirejs

我正在尝试将angularjs app与requirejs集成。我想按需预加载模板和控制器。在我的例子中:

http://plnkr.co/edit/vIps7t92OFzA5RXoTjvI?p=preview

我在app.js中初始化控制器SocialController,我需要在SocialController中动态加载StreamController。不幸的是我得到了一个例外,请参阅浏览器控制台。

  

Argument' StreamController'不是一个功能,未定义

如果我从SocialController中删除

angular.module('sampleTest').controller('StreamController', StreamController);

并将其添加到app.js,它可以工作,但在这种情况下,requirejs将在开始时预先加载它,而不是在我需要时,在SocialController内按需加载。

1 个答案:

答案 0 :(得分:0)

这是一个答案。在应用启动之后,看起来angular似乎不允许在以后实例化任何新服务或控制器。因此,在所有控制器和服务都是init之后,下面的代码我必须添加到底部的app.js文件。这是一个黑客,但修复了与requirejs延迟加载的问题。

使用修复程序查看我的plunkr链接。现在没有异常,StreamController在启动后延迟加载和初始化。

sampleApp.config(
            function (
                $controllerProvider,
                $compileProvider,
                $filterProvider,
                $provide
            ) {
                sampleApp.controller = $controllerProvider.register;
                sampleApp.directive = $compileProvider.directive;
                sampleApp.filter = $filterProvider.register;
                sampleApp.factory = $provide.factory;
                sampleApp.service = $provide.service;
            }
        );