Angular 访问自定义管道中的组件 属性

Angular access component property in custom pipe

我目前实现了一个简单的搜索功能 here,允许用户搜索课程。目前只有来自用户输入的实时 searchText 使用突出显示管道突出显示:

<td> <div [innerHTML]= "course.course_title | highlight : searchText"></div> 
<td>  
 <read-more [text]="course?.description | highlight : searchText" [maxLength]="75"> </read-more>
 </td>
  <td>  
    <read-more [text]="course?.keywords | highlight : searchText" [maxLength]="50"> </read-more>
 </td>

突出显示是使用以下正则表达式完成的:

transform(value: string, args: string): any {

if (args && value){
   var re_noSpace = /\s*,\s*/;
   var queryList = args.split(re_noSpace).filter(String);
   var re_matchQueries = new RegExp(queryList.join('|'),"gi");
   //e.g. if args was linear,equa, the regExpr will become  /linear|equa/gi
   return value.replace(re_matchQueries,(x)=>"<mark>"+x+"</mark>");
}

用户可以使用逗号 (linear algebra, data science) 或通过按钮添加来过滤课程。当用户通过按钮向 searchTerms 数组添加过滤器时,我想突出显示 both 当前 searchText 以及所有以前的搜索词。

测试用例:如果用户通过按钮添加 linear algebradata science 作为过滤器,则在用户键入时仍应进行实时突出显示,此外还会显示任何先前的术语突出显示,以便用户可以看到以前的术语匹配的地方。

我的想法是通过在正则表达式 (includePreviousTerms) 中包含之前的 searchTerms 来调整突出显示管道:

transform(value: string, args: string): any {

if (args && value){
   var re_noSpace = /\s*,\s*/;
   var queryList = args.split(re_noSpace).filter(String);

   var includePreviousTerms = queryList.concat(this.searchTerms); 

   var re_matchQueries = new RegExp(includePreviousTerms.join('|'),"gi");
   return value.replace(re_matchQueries,(x)=>"<mark>"+x+"</mark>");
}

但是,我不确定如何从管道访问 this.searchTerms,因为我无法导入它。我也许可以通过从视图中传递它来访问数组:

 <td> <div [innerHTML]= "course.course_title | highlight : searchTerms"></div> 
 <td>  
     <div [innerHTML]="course.description | highlight : searchTerms">  </div>
</td>

但那样我就再也看不到实时突出显示了。我怎样才能实施这种方法,或者什么是调和这两者的更好方法?

谢谢!

您可以向管道添加额外的参数,如下所示:

transform(value: string, args: string, terms: string): any {

并通过模板传递它,如下所示:

<read-more [text]="course?.keywords | highlight : searchText : searchTerms" [maxLength]="50"> </read-more>

这允许我们同时传递 searchText 和额外的值

在这里,我创建了一个名为 test 的额外参数,我正在传递 searchTerms