Tôi đã tạo bộ lọc AngularJS để tự động tạo liên kết có thể nhấp từ các địa chỉ được tìm thấy trong dữ liệu. Bộ lọc:Bộ lọc AngularJS trả về html dưới dạng chuỗi
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;
};
});
Và đây là cách tôi gọi đó là (bên trong một đoạn văn):
<p><strong>Details:</strong> {{event.description | parseUrl}}</p>
Và làm việc này một cách chính xác để thay thế các liên kết văn bản đơn giản với mã cho một liên kết. Tuy nhiên, nó thay thế nó bằng liên kết theo nghĩa đen là văn bản thuần túy. Ví dụ: www.google.com
sẽ được thay thế bằng . Điều này rõ ràng không tạo ra một liên kết có thể nhấp, đó là mục tiêu của tôi.
Tôi không chắc tại sao điều này lại xảy ra. Bất kỳ ý tưởng về cách ngăn chặn/sửa chữa nó? Cảm ơn.
Bạn có thể xem bộ lọc "liên kết" mà AngularJS cung cấp (http://docs.angularjs.org/api/ngSanitize.filter:linky) trong mô-đun ngSanitize - bộ lọc đó có thể đã làm những gì bạn cần, và tài liệu cho nó hỗ trợ các đề xuất được đưa ra trong các câu trả lời liên quan đến lệnh ng-bind-html/ng-bind-html-unsafe. – CBerube