2014-08-28 21 views
2

我想清理控制器中的HTML,因爲我試圖用帖子的標題動態更新document.title。 (我知道,搜索引擎優化的目的,這是不推薦,但我需要在這裏使用它)Angular JS - 我如何在控制器中清理HTML?

$scope.prevTitle = "dynamic title gets pulled in here &" 
document.title = $scope.prevTitle 

在這個例子中,我只是使用一個隨機的HTML實體。我試過official documentation的parseAsHtml方法,但我沒有運氣。我試過以下內容:

document.title = $sce.parseAsHtml($scope.prevTitle) 

但是沒有運氣。文檔表明它需要在一個函數中使用。有關我如何實現這一目標的任何建議?

以上的控制檯登錄(執行console.log($ sce.parseAsHtml($ scope.prevTitle)))將返回:

function (b,c){return e.getTrusted(a,d(b,c))} 
+1

我認爲這裏的問題是,你不能把HTML放到'document.title'中,你需要[HTML解碼它](http://stackoverflow.com/questions/5796718/html-entity - 解碼) – CodingIntrigue 2014-08-28 12:15:24

+0

謝謝@RGraham,我會考慮這個選項:) – LT86 2014-08-28 12:46:17

回答

1

使用$ sanitize方法和trustAsHtml代替

首先,注入 'ngSanitize' 你的模塊

現在在你的控制器中,只需添加

$scope.prevTitle = "dynamic title gets pulled in here &" 
document.title = $sce.trustAsHtml($scope.prevTitle) 
+1

謝謝,但這似乎做相反或根本沒有任何影響?前段時間我在模塊中注入了ngSanitize。 – LT86 2014-08-28 12:45:53

+0

你不需要爲'ngSanitize'工作''sce.trustAsHtml'。相反,這允許顯示未轉義的HTML字符串。 – Wtower 2016-07-21 17:36:01

0

如果要消毒返回的HTML,我認爲這將是作爲使用$sanitize服務一樣簡單:

document.title = $sanitize($sce.parseAsHtml($scope.prevTitle)) 
+1

感謝您的回答。不幸的是,這隻能防止標題更新。控制檯給我$ sanitize沒有定義,即使我已經將它定義爲依賴關係 – LT86 2014-08-28 12:42:51

+0

@ LT86是否包含了'angular-sanitize.js'文件? @acg,爲什麼在清理之前需要'parseAsHtml'? – Wtower 2016-07-21 17:53:55

2

$sanitize可以作爲@acg指出使用。或者,您可以直接使用ng-bind-html指令,它在呈現輸出之前自動清理輸出變量。

以上幾點在documentation中並不十分清楚,但有一個相當廣泛的例子,您可以在pluncker中玩。

請注意,ngSanitize是一個外部模塊,您需要明確加載angular-sanitize.js或將其包含在您的js縮小中。

相關問題