我有一个带有自定义管道的Angular 5 SPA,可以使用RegExp替换文本。 问题是:可能有数百个字段要转换,并且在页面上的每次更改时,管道都会重新启动。
constructor(private sanitizer: DomSanitizer) {}
transform(value: any, query: string, searching: boolean): SafeHtml {
console.log('.'); // to count
if (!searching) {
return value;
}
const re = new RegExp(query, 'gi');
const html = value.toString();
if (!_.isEmpty(query) && query.length > 2) {
const result = html.replace(re, `<span class='mark' id='${uuid()}'>${query}</span>`);
return this.sanitizer.bypassSecurityTrustHtml(result);
}
return value;
}
如何防止这种行为?我想更改我的更改检测策略或下一个循环的时间延迟。 “查询”来自一个文本框,在按下按键时,管道启动,并且我无法在几秒钟内输入更多字符。
如果有一种不使用管道的简单方法,那么我会接受。任务是像浏览器内置的CTRL-F + F3一样实现页面搜索,但仅用于内容字段。表标题,按钮等中没有匹配项。
如果没有办法,我可以将所有内容字段标记为“可搜索”,并在无管道渲染后开始替换。但是,当我更改查询时,必须重新设置所有标记。