2013-11-24 39 views
0

我有一個場景,其中我需要動態加載角JS應用。我已經基於代碼這個: -最佳裝載的方式和摧毀角JS 1.2

https://stackoverflow.com/a/15252490/1545858

現在,我有一個具有角JS 1.1.5作品真的很好的代碼,但在1.2.1,沒有這樣的運氣。

這裏是JS代碼: -

$("#startMeUp").click(function() { 
// Make module Foo 
angular.module('Foo', []); 
// Make controller Ctrl in module Foo 
angular.module('Foo').controller('Ctrl', function($scope) { 
    $scope.data = {}; 
    $scope.data.name = 'KDawg'; 
    $scope.destroy = function() { 
     $scope.$destroy(); 
     $('#Ctrl').remove(); 
    }; 
    $scope.$on("$destroy", function() { 
     console.log("EXTERMINATE"); 
    }); 
}); 
// Load an element that uses controller Ctrl 
$('<div ng-controller="Ctrl" id="Ctrl"> ' + 
    '<input type="text" ng-model="data.name"></input>' + 
    '{{data.name}}' + 
    '<button ng-click="destroy()">Destroy Me</button></div>').appendTo('#container'); 
// Bootstrap with Foo 
angular.bootstrap($('#Foo'), ['Foo']); 
}); 

這裏是HTML: -

<button id="startMeUp">Start Me Up!</button> 

<div id="Foo"> 
    <div id="container"> 

    </div> 
</div> 

現在,如果你有角的js 1.1.5,一切都開始和破壞並重新開始工作正常,但在角度js 1.2.1它不起作用在第二次啓動。任何關於如何使它在1.2.1中工作的想法?

這裏是JS小提琴: -

http://jsfiddle.net/Y9wj2/

+1

,如果你在頁面bootsrap角一次鏈接它,爲什麼你需要再來一遍?摧毀一個控制範圍不破壞模塊或什麼,我想實現的角度JS的是整合現有的頁面和表單模塊 – charlietfl

回答

1

由於charlietfl說,你不需要引導不止一次。事實上,使用angular.js 1.2.1,所產生的誤差,打破一切正是在告訴你:

[NG:btstrpd]應用已與此元素'

你應該自舉仔細想想你是否真的需要這個控制器是動態的。如果你可以使用類似ng-include加載額外的內容,那麼你將有一個更容易的時間,也不需要擔心如何編譯內容。

如果你發現你真的需要藉此HTML和角上下文之外加載它,那麼你可以使用$compile服務。引導該應用一次某處第一,優選使用ng-app並抓住注射器。

var injector = angular.bootstrap($('#Foo'), ['Foo']); 

<div id="Foo" ng-app="Foo"></div> 

var injector = $('#Foo').injector(); 

現在你可以插入HTML但是你喜歡,然後編譯並使用

injector.invoke(['$compile', '$rootScope', function($compile, $rootScope) { 
    $compile(insertedJqLiteNode)($rootScope); 
}); 
+0

的結合。基本上,表單將在A,B和C情況下啓動一個普通的舊提交,但D和E使用角度。所以我想如果我摧毀或創建控制器,這可能是最好的方法。關於它的思考多了,我想如果我更新/創建一個對象,並用角的事件總線將此信息傳達給角可能會更好。我想我會進一步調查,如果我有問題,可能會問另一個問題。謝謝。 – user1545858