Angular: Получить экземпляр класса канала только по указанному pipeName - PullRequest
0 голосов
/ 08 марта 2020

Я трачу часы, чтобы узнать, как я могу получить экземпляр объекта класса канала только по имени канала.

Например:

let uppercasePipeInstance: UpperCasePipe = getPipeByName(pipeName);
uppercasePipeInstance.transform('some params');

------ -----> Возможно ли это в angular ??

-----------> Как этого добиться, даже если это было сложно сделать ??

Ответы [ 2 ]

0 голосов
/ 08 марта 2020

Создайте свой собственный объект как { key: value} пары. как

availablePipes = { uppercase: 'UpperCasePipe', lowercase: 'LowerCasePipe' }; 

Тогда:

private getPipeByName(pipeName: string) {
    const pipe = this.availablePipes.pipeName;
    if(pipe) {
        this[pipe]();
    }
}
0 голосов
/ 08 марта 2020

Вы можете внедрить экземпляры труб в конструктор. Вам нужно будет зарегистрировать его в качестве поставщика в вашем модуле или компоненте.

app.module.ts

import { UpperCasePipe } from '@angular/common';

@NgModule({
  providers: [ UpperCasePipe ]
})
export class AppModule {}

component.ts

constructor(private upperCasePipe: UpperCasePipe) {}

value: string;

ngOnInit() {
  this.value = this.upperCasePipe.transform('some value');
}

DEMO: https://stackblitz.com/edit/angular-xnx1za

Я предполагаю, что вы используете только UpperCasePipe в качестве простого примера, поскольку очевидно, что было бы излишним вводить этот конкретный канал вместо использования javascript строковых функций.

...