2016-10-19 113 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使用。