我的 Angular 5 Pipe“trim”没有被调用,为什么?

Yas*_*nik 2 pipe angular-pipe angular

我创建了一个Pipe名为trim. 此管道旨在从字符串中删除最后一个字符。这是我的管道类TrimPipe。在 HTML 中使用管道时,控制台不会记录这些值。这里的 HTML 用法 -

<ng-container *ngFor="let bg of backgrounds.preferred">
       <span>{{bg.name ? (bg.name + ', ') : '' | trim}}</span>
   </ng-container>
Run Code Online (Sandbox Code Playgroud)
import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'trim'
})
export class TrimPipe implements PipeTransform {

  transform(value: any, args?: any): any {
    console.log(value, args, 'Pipes');
    return value.toString().substring(0, value.length - 1);
  }

}
Run Code Online (Sandbox Code Playgroud)

我的app.module.ts档案——

import {BrowserModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {NgModule} from '@angular/core';
import {FormsModule} from '@angular/forms';
import {HttpClientModule} from '@angular/common/http';

// Custom
import {AppComponent} from './app.component';
import {CommonService} from './shared/services/common.service';
import {DirectivesModule} from './shared/directives/directives.module';
import {PipeModule} from './shared/pipe/pipe.module';]


@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    DirectivesModule,
    PipeModule,
    HttpClientModule,
    BrowserModule,
    BrowserAnimationsModule,
    NgSelectModule,
    FormsModule
  ],
  providers: [CommonService],
  bootstrap: [AppComponent]
})
export class AppModule {
}
Run Code Online (Sandbox Code Playgroud)

我的pipe.module.ts——

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { TrimPipe } from './trim.pipe';

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [TrimPipe],
  exports: [TrimPipe]
})
export class PipeModule { }
Run Code Online (Sandbox Code Playgroud)

fun*_*zer 5

当 bg.name 为假时,您仅在空字符串上使用管道。通过移动括号修复:

<span>{{(bg.name ? bg.name + ', ' : '') | trim}}</span>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果您将整个逻辑移到管道中或在将字符串传递给模板(即在组件或服务代码中)之前预先格式化字符串,您将获得性能优势。Angular 在每个变更检测周期的模板插值中运行所有评估,而纯管道会被缓存,直到输入值发生变化。