作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用插值在我的 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
用户名的多次出现。
这两个版本都在 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/
我是一名优秀的程序员,十分优秀!