2016-10-19 85 views
0

继AJAX请求返回的HTML数据,然后将其放置在角度属性不呈现在AJAX

<p ng-bind-html="result_data"></p> 

Ajax请求如下:

$http.post(url, data, config) 
     .success(function (data, status, headers, config) { 
     $scope.result_data = data; 
     }) 

返回的HTML是:

<a href='#' ng-click="exe('test123')">test123</a> 

但是,当它在结果中呈现时,当检查元素时,没有ng-click属性可用。如何获取这些参数,因为它们在Ajax响应?我错过了什么?
任何帮助,非常感谢。

+0

什么是http响应? –

+0

@PravinErande,'test123'这是http响应,但'ng-click ='exe('test123')''锚标记的这个属性没有被渲染。 – meen

回答

1

您的html包含ng-click指令,它需要先编译。 ng-bind-html指令不会自动执行此操作,我相信。

您可能需要将其更改为这样的事情

<p your-own-compile="result_data"></p> 

,创造新的指令来处理编译。

yourAngularModule.directive('yourOwnCompile', ['$compile', function ($compile) { 
    var linker = function(scope, element, attr) { 
     element.append($compile(attr.yourOwnCompile)(scope)); 
    } 

    return { 
     restrict : 'A', 
     link : linker   
    } 
}]); 

更好的解决方案是只提供JSON数据而不用任何html标记。

+0

谢谢@Zamrony,您能否提供文档链接?我是angularjs的新手,所以我想详细阅读它。 – meen

1

您要返回的HTML使用$sanitize服务进行了消毒。

为了让您的代码按照您的预期工作,您需要明确地告诉它它是受信任的html。

$http.post(url, data, config) 
    .success(function (data, status, headers, config) { 
     $scope.result_data = $sce.trustAsHtml(data); 
    }); 

但是,正如您从this plunker所看到的,该功能不起作用。正如Zamrony指出的那样,您将需要编译返回的HTML(Angular没有看到它)。

您可以使用此指令来这有效地完成: https://github.com/incuna/angular-bind-html-compile

它在this answer使用。