angular - 我如何将单个单词显示为 Angular 完整消息的超链接

标签 angular

我正在使用插值在我的 Angular 应用程序上显示一条消息。该消息也包括一个人的名字。我使用@来指定人名。我想要的是我正在显示的任何人的名字都应该是一个超链接。当点击链接时,人会被重定向到个人资料。

最佳答案

你想构建一个管道指令 事实证明,操作 DOM 元素更适合指令和组件。

这是我的工作 StackBlitz directive .

正则表达式方法

我得到帮助找到了有效的正则表达式 /@[0-9a-zA-Z]{5,20}(?=\\s|$)/:

// REGEX-MATCH AND REPLACE THE USERNAME SUBSTRING(S)
ngAfterViewInit(){
    this.initialText = this.el.nativeElement.innerText;

    this.finalText = this.initialText.replace(/@[0-9a-zA-Z]{5,20}(?=\\s|$)/, function(username) {
        return `<a href="#${username.substring(1)}">${username}</a>`;
    });

循环方式

当循环时,您必须测试每个单词以检查 @xxxxxxx 用户名的多次出现。

  • 获取任意一组文本
  • 在每个空格处拆分每个单词
  • 检查每个单词是否匹配@xx
  • @username 文本引用的词
  • 将@username 实例包装在一个标签中
  • 用finalText替换元素的原始文本
  • 这不检查特殊字符
  • 这不会检查已经包装的@usernames

这两个版本都在 StackBlitz 中,使用 innerHTML 替换。

ngAfterViewInit(){
    this.initialText = this.el.nativeElement.innerText;
    if (this.initialText && this.initialText.length > 0) {
        for (let text of this.initialText.split(" ")) {
            if (text.startsWith("@") && text.length > 1){
              this.finalText += `<a href="#${text.substring(1)}">${text}</a> `;
            } else {
              this.finalText += text + " ";
            }
        }
    }
}

关于angular - 我如何将单个单词显示为 Angular 完整消息的超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56563360/

相关文章:

angular - 递归放置的组件不显示

angular - 如何以响应方式使用 Angular flex 布局扭曲和居中多个 div

angular - 如何将选项卡标题文本换行为 2 行?

Angular2 检查表单控件之一是否处于焦点

ios - 如何在 ios 应用程序中绘制图钉问题?

javascript - 如何正确更改 *ngFor Items 中的样式?

javascript - 在 Angular/客户端项目中使用转换为 JavaScript 的 Kotlin 代码

javascript - ngFor 与分页一起使用时的索引问题

css - 从 Webpack 1.x 迁移到 Webpack 2.x 的问题

angular - 模板继承和/或组合