2014-02-05 47 views
2

我想刪除一些被帶入通過這個DOM元素...有回調NG綁定,HTML不安全的AngularJS

<div ng-bind-html-unsafe="whatever"></div> 

我寫了一個函數,將刪除元素,但我需要一種方法來在ng-bind-html-unsafe完成後觸發該功能。有沒有回撥ng-bind-html-unsafe或更好的方法?

回答

0

我會在你的演示移動HTML到directive:在指令

<div ng-bind-html-unsafe="whatever"></div> 

我會根據我的需要操縱的HTML,我在這裏立足本上的假設,因爲我不知道怎麼樣經常或如何whatever變量被更新,所以通用的解決方案將是一個$watch聽衆超過這個變量是這樣的:

$scope.$watch('whatever',function(newValue,oldValue, scope){ 
    //do something 
}); 

所有這些代碼在我的新指令,可能你會想用postLink函數

這裏是關於這個的the Documentation from Angular

後鏈接功能 鏈接子元素後執行。在後鏈接功能中進行DOM轉換是安全的。

+0

的內容是靜態的,但包括外部CSS文件的引用。我試圖刪除那些引用,像...'querySelectorAll('[rel =「stylesheet」]')'所以我只需要知道第一次加載後。 – Kirkland

+0

你不會在你的控制器中操作HTML,這是不正確的做法,該指令有你所需要的。這是角度推薦的。 – Dalorzo

+0

在ng-bind-html-unsafe完成之前或之後,指令是否會在元素上執行? – Kirkland

1

ng-bind-html-unsafe已經從angular的當前版本(1.2+)中刪除。我會建議在新版本的angular中使用$ sanitize服務。您需要包含清理庫並將其添加到模塊中。

這樣,一旦清理操作完成,您就可以做任何事情,而不用擔心回調。

一個快速和骯髒的實施:

<!doctype html> 
<html lang="en"> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.11/angular.js"></script> 
    <script src="libs/angular/angular-sanitize.js"></script> 
</head> 
<body ng-app="myApp"> 
    <div ng-controller="myController"> 
    <div>{{sanitized}}</div> 
    </div> 
    <script> 
    angular.module('myApp', ['ngSanitize']) 
     .controller('myController', ['$scope', '$sanitize', function($scope, $sanitize) { 
     $scope.sanitized = $sanitize('someTextFromSomeSource'); 
     // Do whatever you want here with the cleaned up text 
     }]) 
    </script> 
</body> 
</html>