我有一个现有页面,我需要在其中放置一个带有可以动态加载的控制器的角度应用程序。
这是一个片段,它根据 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);
});
JSF中。请注意,这是对实际事件链的简化,上面的行之间有各种异步调用和用户输入。
当我尝试运行上述代码时, $compile 返回的链接器会抛出:Argument 'Ctrl' is not a function, got undefined
。如果我正确理解引导程序,它返回的注入器应该知道Foo
模块,对吧?
相反,如果我使用 制作一个新的注入器angular.injector(['ng', 'Foo'])
,它似乎可以工作,但它会创建一个新的注入器,它$rootScope
不再与Foo
引导模块的元素的范围相同。
我是否使用了正确的功能来执行此操作,或者我错过了什么?我知道这不是 Angular 的方式,但我需要将使用 Angular 的新组件添加到不使用 Angular 的旧页面中,而且我不知道引导模块时可能需要的所有组件。
更新:
我更新了小提琴以表明我需要能够在未确定的时间点向页面添加多个控制器。