Angular, сделать ссылки в комментариях кликабельными

Я работаю над приложением, в котором пользователь может добавлять комментарии к определенным полям. эти комментарии также могут быть ссылками. Итак, как пользователь, я хочу иметь возможность нажимать на эти ссылки, а не копировать их и вставлять в новую вкладку.

  • Если в значении комментария/атрибута встречается обычная веб-ссылка ([http://|http:]... или [https://|https:]...), она должна быть представлена ​​как интерактивная ссылка.
  • Несколько ссылок могут встречаться в одном и том же значении комментария/атрибута.
  • При нажатии на ссылку открывается новая вкладка браузера, которая вызывает эту ссылку.

Вот как осуществляется управление formControl. Я думаю, что могу идентифицировать несколько ссылок с помощью регулярных выражений, но как мне сделать их кликабельными?

Спасибо за ответ и помощь заранее.

this.formControl = new FormControl('', [this.params.customValidations(this.params)]);
    this.formControl.valueChanges.subscribe(() => {
      this.sendStatusToServices();
    }); 

   

ссылка не обязательно будет начинаться с http или https Возможно этот вопрос о регулярном выражении для распознавания ссылок поможет вам

tacoshy 18.10.2022 11:53
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
1
79
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вне редактора формы/ввода (скорее всего, то, что вы ищете)

Либо перед сохранением значения поля формы в базе данных, либо перед редактированием полученного тела из базы данных непосредственно перед представлением пользователю вы можете использовать Regex для замены ссылок тегами привязки.

function replaceURLWithHTMLLinks(text) {
    var exp = /(\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/ig;
    return text.replace(exp,"<a href='$1'>$1</a>"); 
}

Богатый текстовый редактор

Однако, если вы пытаетесь включить ссылки ВНУТРИ ввода формы (например, текстовый редактор WordPress), это будет немного сложнее. Вам понадобится <textarea>, чтобы включить пользовательские элементы HTML. Затем вам нужно определить, когда пользователь набрал URL-адрес, чтобы вы могли вызвать replaceURLWithHTMLLinks(). Честно говоря, вы должны просто использовать package. Там есть несколько хороших.

Надеюсь это поможет

Используя подход регулярных выражений и канал, я смог придумать что-то вроде ниже. Что я делаю, так это заменяю ссылки тегами гиперссылок, используя правильное регулярное выражение.

регулярное выражение для замены URL взято из здесь

Поддерживает несколько ссылок в одном комментарии.

Вот пример кода трубы

@Pipe({
  name: 'comment'
})
export class CommentPipe implements PipeTransform {

  constructor(private sanitizer: DomSanitizer){}

  transform(value: any, args?: any): any {
    const replacedValue = this.linkify(value);
    return this.sanitizer.bypassSecurityTrustHtml(replacedValue)
  }

  // https://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links#21925491
  // this method is taken from above answer
  linkify(inputText: string) {
    var replacedText, replacePattern1, replacePattern2, replacePattern3;

    //URLs starting with http://, https://, or ftp://
    replacePattern1 = /(\b(https?|ftp)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/gim;
    replacedText = inputText.replace(replacePattern1, '<a href = "$1" target = "_blank">$1</a>');

    //URLs starting with "www." (without // before it, or it'd re-link the ones done above).
    replacePattern2 = /(^|[^/])(www\.[\S]+(\b|$))/gim;
    replacedText = replacedText.replace(replacePattern2, '$1<a href = "http://$2" target = "_blank">$2</a>');

    //Change email addresses to mailto:: links.
    replacePattern3 = /(([a-zA-Z0-9\-\_\.])+@[a-zA-Z\_]+?(\.[a-zA-Z]{2,6})+)/gim;
    replacedText = replacedText.replace(replacePattern3, '<a href = "mailto:$1">$1</a>');

    return replacedText;
  }

}

Вот и завершенный stackblitz

Если вам нужны ссылки внутри самого ввода, вы можете попробовать другой подход.

Другие вопросы по теме