2014-01-07 42 views
0

我將DOM元素附加到body。在工廠編寫代碼。

var templateElement = angular.element('<div class="popup modal-body"><div class="button-cancel" type="button" ng-click="closePopup()"></div>'+content+'</div>'); 
    var scope = {}; 
    scope.closePopup = function(){ 
     var popup = angular.element(document.querySelector('.popup')); 
     popup.remove(); 
    } 

    var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) { 
     body.append(clonedElement); 
    }); 

除ng-click以外的所有工作。當我點擊div時出現此錯誤:

Uncaught TypeError: Object #<Object> has no method '$apply' 

我做錯了什麼?由於

+0

你在哪裏寫了這段代碼?在指令? –

+0

@Maxim Shoustin我在工廠寫了一篇文章。 – ishwr

+0

@zeroflagL我確實發佈了 – ishwr

回答

4

根據the docs,由$compile()返回的功能需要一個Scope對象作爲其第一個參數。你提供一個正常的JS對象(當然沒有$apply方法)。

如果你想創建一個新的範圍,你可以注入$rootScope(通過Dependency Injection),並使用其$new()方法:

app.factory('myFactory', function($rootScope) { 
    var scope = $rootScope.$new(); 
    ... 
}); 

這似乎有點怪異創建儘管在工廠內部有新的範圍,所以提供更多關於最終嘗試實現的細節可能有助於某人提出更好的方法。

+0

兆giga謝謝! :) – ishwr