我有一个现有页进我需要可动态加载控制器下降的角应用程序。加载一个AngularJS控制器动态
这里是它实现了我最好的猜测,应该如何基于API和一些相关的问题做一个片段,我发现:
// Make module Foo
angular.module('Foo', []);
// Bootstrap Foo
var injector = angular.bootstrap($('body'), ['Foo']);
// Make controller Ctrl in module Foo
angular.module('Foo').controller('Ctrl', function() { });
// Load an element that uses controller Ctrl
var ctrl = $('<div ng-controller="Ctrl">').appendTo('body');
// compile the new element
injector.invoke(function($compile, $rootScope) {
// the linker here throws the exception
$compile(ctrl)($rootScope);
});
JSFiddle。请注意,这是对事件链的简化,上面各行之间有各种异步调用和用户输入。
当我试图运行上面的代码,它是由$编译返回的连接抛出:Argument 'Ctrl' is not a function, got undefined
。如果我正确理解引导程序,它返回的喷油器应该知道Foo
模块,对吧?
相反,如果我让使用angular.injector(['ng', 'Foo'])
一个新的喷油器,它似乎工作,但它会创建一个新的$rootScope
这不再是相同的范围内,其中Foo
模块进行自举的元素。
我使用正确的功能来做到这一点或者是有什么我已经错过了?我知道这是不是这样做的角的方式,但我需要补充的是使用角度来不老的网页新的组件,而我不知道这一切时,我引导模块,可能需要的组件。
UPDATE:
我已经更新了fiddle表明,我需要能够在不确定个时刻多个控制器添加到页面。
为什么你不只是声明所有的控制器的正常角度的方式在前面,然后做你的页面加载基于你在什么网页中插入编译? – boxed 2013-03-06 15:57:28
有很多可能的控制器,我只打算在该特定页面上使用一个或两个控制器,但我不知道用户选择哪一个或两个控制器。 – 2013-03-07 06:51:24
将所有这些控制器放入一个大(最好是缩小的).js文件中,并确保该文件被浏览器正确缓存。你不可能有这么多的控制器,这是一个问题。 – boxed 2013-03-07 08:20:13