angular 通过 html 文本输入与路由器交互的最佳方式
angular best way to interact with the router from html text input
我使用 froala 文本编辑器来存储一些用户输入。
我想在 html 文本中创建一些特定的输出,这些输出创建 links 能够与路由器或一般应用程序交互(调用控制器中的函数等等......)。
将 "reinterpret" html link 路由 link 的最佳方法是什么,这样页面就不会重新加载?
froala 输出:
<a href="/someRoute">some text</a>
治疗后会变成:
<a [routerLink]="['/someRoute']">some text</a>
编辑:
我不需要 froala。我可以创建自己的编辑器。但我需要将 html 用户输入转换为路由器 link 或组件函数
编辑 2:
是否可以将 html 重新解释为
<app-mycomponent [someVariable]="someVariable"></app-mycomponent>
这是我需要的框架:
https://stackblitz.com/edit/angular-tnnw8n?embed=1&file=src/app/hello.component.ts
我可以解析 html 以找到我的特定标签并在视图中使用 *ngIf
<ng-container *ngFor="let parsedHtml of arrayOfHtmlPart">
<ng-container *ngIf="isHtml(parsedHtml)">
{{parsedHtml}}
</ng-container>
<ng-container *ngIf="!isHtml(parsedHtml)">
<app-mycomponent></app-mycomponent>
</ng-container>
</ng-container>
但不优雅
您可以使用 @HostListener
and @Input
Binding Event and by following example of TableRow, in which i have performed redirection using Router
:
这是在另一个组件的 HTML 中声明为
的组件
<app-table-row [takeMeTo]='"/redirected"'></app-table-row>
这将是它的实际组成部分 class
export class TableRowComponent implements OnInit {
@Input() takeMeTo:string;
@HostListener('click', ['$event.target'])
onClick(btn) {
console.log(this.takeMeTo);
this.router.navigate([this.takeMeTo]);
};
constructor(public router : Router) { }
ngOnInit() {
}
}
如果您想查看完整的流程和代码,请点击此处 Stackblitz。
编码愉快!! :)
正如 Nasiruddin Saiyed 所说,您应该使用 Nasiruddin Saiyed @HostListener,然后检测您希望被视为路由器的 A 标签 links。如果元素 class 设置为 'content-inside',它将作为路由器 link(无需重新加载)
@HostListener('click', ['$event'])
public onClick(event) {
if (event.target.tagName === 'A' && event.target.getAttribute('class') === 'content-inside') {
this.router.navigate([event.target.getAttribute('href')]);
event.preventDefault();
} else {
return;
}
}
我使用 froala 文本编辑器来存储一些用户输入。 我想在 html 文本中创建一些特定的输出,这些输出创建 links 能够与路由器或一般应用程序交互(调用控制器中的函数等等......)。
将 "reinterpret" html link 路由 link 的最佳方法是什么,这样页面就不会重新加载?
froala 输出:
<a href="/someRoute">some text</a>
治疗后会变成:
<a [routerLink]="['/someRoute']">some text</a>
编辑: 我不需要 froala。我可以创建自己的编辑器。但我需要将 html 用户输入转换为路由器 link 或组件函数
编辑 2: 是否可以将 html 重新解释为
<app-mycomponent [someVariable]="someVariable"></app-mycomponent>
这是我需要的框架: https://stackblitz.com/edit/angular-tnnw8n?embed=1&file=src/app/hello.component.ts
我可以解析 html 以找到我的特定标签并在视图中使用 *ngIf
<ng-container *ngFor="let parsedHtml of arrayOfHtmlPart">
<ng-container *ngIf="isHtml(parsedHtml)">
{{parsedHtml}}
</ng-container>
<ng-container *ngIf="!isHtml(parsedHtml)">
<app-mycomponent></app-mycomponent>
</ng-container>
</ng-container>
但不优雅
您可以使用 @HostListener
and @Input
Binding Event and by following example of TableRow, in which i have performed redirection using Router
:
这是在另一个组件的 HTML 中声明为
的组件<app-table-row [takeMeTo]='"/redirected"'></app-table-row>
这将是它的实际组成部分 class
export class TableRowComponent implements OnInit {
@Input() takeMeTo:string;
@HostListener('click', ['$event.target'])
onClick(btn) {
console.log(this.takeMeTo);
this.router.navigate([this.takeMeTo]);
};
constructor(public router : Router) { }
ngOnInit() {
}
}
如果您想查看完整的流程和代码,请点击此处 Stackblitz。
编码愉快!! :)
正如 Nasiruddin Saiyed 所说,您应该使用 Nasiruddin Saiyed @HostListener,然后检测您希望被视为路由器的 A 标签 links。如果元素 class 设置为 'content-inside',它将作为路由器 link(无需重新加载)
@HostListener('click', ['$event'])
public onClick(event) {
if (event.target.tagName === 'A' && event.target.getAttribute('class') === 'content-inside') {
this.router.navigate([event.target.getAttribute('href')]);
event.preventDefault();
} else {
return;
}
}