我可以在服务中使用$ compile,因为抛出的错误范围不存在。
services.factory('getRegistersrvs', function($http, $compile) {
return {
getRegisterpage: function() {
return $http.get(baseUrl+'signup', {cache: true});
},
replaceTemp: function(response, $elem) {
$elem.replaceWith($compile(response.data));
}
}
});
这里的response.data是从ajax http.get获得的html数据。
我需要使用它来获得动态元素的点击工作
答案 0 :(得分:1)
您可以使用scope
方法访问元素范围:
replaceTemp: function(response, $elem) {
var scope = $elem.scope();
$elem.replaceWith($compile(response.data)(scope));
}
此方法假定$elem
是angular.element
的实例。如果不是(例如纯DOM元素),则需要将其包装angular.element($elem).scope()
。
另一种方法是使用$rootScope.$new()
创建新范围或仅使用$rootScope
本身,但当然使用要替换的元素的范围是有意义的。
答案 1 :(得分:0)
$compile
服务总是需要一个范围来编译给定的内容。它基本上执行每个角度表达&具有给定范围的上下文中的HTML代码。
因此,您需要提供一些范围才能使其像$rootScope
一样工作。
services.factory('getRegistersrvs', function($http, $rootScope, $compile) {
return {
getRegisterpage: function() {
return $http.get(baseUrl+'signup', {cache: true});
},
replaceTemp: function(response, $elem) {
$elem.replaceWith($compile(response.data)($rootScope));
}
}
});