Javascript 在[innerhtml]中使用angular(ionic)绑定(单击)以表示提及@或哈希标记#
Hi尝试通过友好方式添加链接到用户提交的文本的某些部分,如:Javascript 在[innerhtml]中使用angular(ionic)绑定(单击)以表示提及@或哈希标记#,javascript,angular,ionic-framework,Javascript,Angular,Ionic Framework,Hi尝试通过友好方式添加链接到用户提交的文本的某些部分,如: submitText = '#test @mention http://google.com' 呈现html: [innerHTML]="submitText | dynamiccontent" 但渲染后的结果是: #测试@提及 但是(点击)=“goToPost($2)”是打印的,不由angular处理 <span class="font-bold" (click)="goToPost(test)">#test&l
submitText = '#test @mention http://google.com'
呈现html:
[innerHTML]="submitText | dynamiccontent"
但渲染后的结果是:
#测试@提及
但是(点击)=“goToPost($2)”是打印的,不由angular处理
<span class="font-bold" (click)="goToPost(test)">#test</span>
#测试
目标是:
如果#找到(单击)=“goToPost($2)”或如果@found(单击)=“goToProfile($2)”
这是管道动态内容
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer, SafeHtml, SafeStyle, SafeScript, SafeUrl, SafeResourceUrl} from '@angular/platform-browser';
@Pipe({ name: 'dynamiccontent' })
export class DynamicContentPipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {}
urls: any = /(\b(https?|http|ftp|ftps|Https|rtsp|Rtsp):\/\/[A-Z0-9+&@#\/%?=~_|!:,.;-]*[-A-Z0-9+&@#\/%=~_|])/gim; // Find/Replace URL's in text
hashtags: any = /(^|\s)(#[a-z\d][\w-]*)/ig; // Find/Replace #hashtags in text
mentions: any = /(^|\s)(@[a-z\d][\w-]*)/ig; // Find/Replace @Handle/Mentions in text
emails: any = /(\S+@\S+\.\S+)/gim; // Find/Replace email addresses in text
transform(text) {
return this.sanitizer.bypassSecurityTrustHtml(this.parseUrl(text));
}
private parseUrl(text: string) {
// Find/Replace URL's in text
if (text.match(this.urls)) {
text = text.replace(this.urls, function replacer($1, $2, $3) {
let url: any = $1;
let urlClean: any = url.replace("" + $3 + "://", "");
return "<a class=\"font-bold noline\" href=\"" + url + "\" target=\"_blank\">" + url + "</a>";
});
}
// Find/Replace @Handle/Mentions in text
if (text.match(this.hashtags)) {
text = text.replace(this.hashtags, "<span class=\"font-bold \" (click)=\"goToPost($2)\">$1$2</span>");
}
// Find/Replace #hashtags in text
if (text.match(this.mentions)) {
text = text.replace(this.mentions, "<a class=\"font-bold noline\" href=\"/search/handle/$2\" >$1$2</a>");
}
// Find/Replace email addresses in text
//if (text.match(this.emails)) {
// text = text.replace(this.emails, "<a href=\"mailto:$1\">$1</a>");
//}
return text;
}
}
从'@angular/core'导入{Pipe,PipeTransform};
从“@angular/platform browser”导入{domsanizer,SafeHtml,SafeStyle,SafeScript,SafeUrl,SafeResourceUrl};
@管道({name:'dynamiccontent'})
导出类DynamicContentPipe实现PipeTransform{
构造函数(私有sanitizer:DomSanitizer){}
URL:any=/(\b(https?| http | ftp | ftps | https | rtsp | rtsp):\/\/[A-Z0-9+&@\/%?=~|!:,.-]*[-A-Z0-9+&\/%=~|]/gim;//在文本中查找/替换URL
hashtags:any=/(^ |\s)(#[a-z\d][\w-]*)/ig;//在文本中查找/替换#hashtags
提及:any=/(^ |\s)(@[a-z\d][\w-]*)/ig;//在文本中查找/替换@Handle/提及
电子邮件:any=/(\S+@\S+\.\S+)/gim;//在文本中查找/替换电子邮件地址
转换(文本){
返回this.sanitizer.bypassSecurityTrustHtml(this.parseUrl(文本));
}
专用解析URL(文本:字符串){
//在文本中查找/替换URL
if(text.match(this.url)){
text=text.replace(this.url,函数replacer($1,$2,$3){
让url:any=$1;
让urlClean:any=url.replace(“+$3+”:/”,“”);
返回“”;
});
}
//在文本中查找/替换@Handle/提及
if(text.match(this.hashtags)){
text=text.replace(this.hashtags,“$1$2”);
}
//查找/替换文本中的哈希标记
if(text.match(this.references)){
text=text.replace(this.references,“”);
}
//在文本中查找/替换电子邮件地址
//if(text.match(this.email)){
//text=text.replace(this.emails,“”);
//}
返回文本;
}
}