我将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 :(得分:4)
根据 the docs ,$compile()
返回的函数将 Scope 对象作为其第一个参数。你提供了一个普通的JS对象(当然没有$apply
方法)。
如果要创建新范围,可以注入$rootScope
(通过 Dependency Injection )并使用其$new()
方法:
app.factory('myFactory', function($rootScope) {
var scope = $rootScope.$new();
...
});
<子> 虽然在工厂内部创建一个新的范围似乎有点奇怪,因此提供有关您最终要实现的目标的更多细节可能有助于某人提出更好的方法。 子>