在请求范围的服务中使用$ compile

时间:2015-01-08 12:51:36

标签: javascript angularjs angularjs-scope angularjs-ng-click

我可以在服务中使用$ 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数据。

我需要使用它来获得动态元素的点击工作

2 个答案:

答案 0 :(得分:1)

您可以使用scope方法访问元素范围:

replaceTemp: function(response, $elem) {
    var scope = $elem.scope();
    $elem.replaceWith($compile(response.data)(scope));
}

此方法假定$elemangular.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));
     }
 }
});