我有一個現有頁進我需要可動態加載控制器下降的角應用程序。加載一個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