在请求范围的服务中使用 $compile
Using $compile in services asking for scope
我可以在服务中使用 $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是从ajaxhttp.get.
得到的html数据
我需要使用它来让动态元素的 ng click 工作
$compile
服务总是需要一个范围来编译给定的内容。它基本上在给定范围的上下文中执行 HTML 中的每个 angular 表达式和代码。
因此您需要提供一些范围才能使其像 $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));
}
}
});
您可以使用 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
本身,当然使用被替换元素的范围是有意义的。
我可以在服务中使用 $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是从ajaxhttp.get.
得到的html数据我需要使用它来让动态元素的 ng click 工作
$compile
服务总是需要一个范围来编译给定的内容。它基本上在给定范围的上下文中执行 HTML 中的每个 angular 表达式和代码。
因此您需要提供一些范围才能使其像 $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));
}
}
});
您可以使用 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
本身,当然使用被替换元素的范围是有意义的。