我創建了一個AngularJS過濾器,用於根據數據中找到的地址自動創建可點擊的鏈接。過濾:AngularJS過濾器將html作爲字符串返回
app.filter('parseUrl', function() {
var //URLs starting with http://, https://, or ftp://
replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim,
//URLs starting with "www." (without // before it, or it'd re-link the ones done above).
replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim,
//Change email addresses to mailto:: links.
replacePattern3 = /(\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
return function(text, target, otherProp) {
angular.forEach(text.match(replacePattern1), function(url) {
text = text.replace(replacePattern1, "<a href=\"$1\" target=\"_blank\">$1</a>");
});
angular.forEach(text.match(replacePattern2), function(url) {
text = text.replace(replacePattern2, "$1<a href=\"http://$2\" target=\"_blank\">$2</a>");
});
angular.forEach(text.match(replacePattern3), function(url) {
text = text.replace(replacePattern3, "<a href=\"mailto:$1\">$1</a>");
});
return text;
};
});
這裏是我怎樣,我稱它(裏面一個段落):
<p><strong>Details:</strong> {{event.description | parseUrl}}</p>
這正常工作,以取代中的鏈接代碼的純文本鏈接。但是,它將其替換爲純文本的鏈接。例如,www.google.com
將被替換爲。這顯然不會產生可點擊的鏈接,這是我的目標。
我不知道爲什麼會發生這種情況。任何想法如何防止/修復它?謝謝。
您可能想看看ngSanitize模塊中的「linky」過濾器AngularJS提供的(http://docs.angularjs.org/api/ngSanitize.filter:linky) - 該過濾器可能已經做了你需要,並且它的文檔支持在有關ng-bind-html/ng-bind-html-unsafe指令的答案中提出的建議。 – CBerube