2016-02-02 10 views
34

Kiedy używam niestandardowej rury w szablonie, to jest tak. I działa dobrze.Czy można użyć rury w kodzie w Angular 2?

{{user|userName}} 

Czy można używać rury w kodzie? Staram się używać tak,

let name = `${user|userName}`; 

Ale to pokazuje

nazwa użytkownika nie jest zdefiniowana

My alternatywny sposób korzysta db.collection.findOne() ręcznie w kodzie. Ale czy istnieje jakiś sprytny sposób?

+0

Nie można użyć szablonu tak, trzeba wprowadzić rurkę do swojej contructor –

+0

przepraszam, ja jasno. Już wstrzykiwam rury –

+0

Którą rurę próbujesz użyć w kodzie? Czy to twoja niestandardowa fajka? – Siva

Odpowiedz

41

@Siva jest poprawna. I dzięki!

więc sposobem korzystania z rury w komponencie jest tak:

let name = new UserNamePipe().transform(user); 

Link z innym podobnym pytaniem.

+0

'... transform()' czy jest to jego domyślna metoda? –

32

w ten sposób można użyć rury w składniku:

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

class YourService { 

    constructor(private pipe: YourPipeComponentName) {} 

    YourFunction(value) { 
    this.pipe.transform(value, 'pipeFilter'); 
    } 
} 
+0

Wygląda ładnie! Ale z jakiegoś powodu wtrysk zależności nie może wstrzyknąć mojej rury do konstruktora, mimo że można go bez problemu używać w html. Jest zadeklarowany i wyeksportowany do innego modułu, może musi być również na liście dostawców? Tworzenie i używanie nowej instancji MyPipe działa. Tylko DI ma problem ... – Sam

+4

@Sam Rzeczywiście, musi być w 'provider'. Dodaj 'YouPipeComponentName' do' providerów' i ta metoda będzie działać idealnie. – SrAxi

+0

Upewnij się, że dodasz go do odpowiednich dostawców. Jeśli chcesz używać potoku na całym świecie, umieść go w usłudze app.module. Jeśli chcesz używać go tylko w niektórych ładowanych leniwie modułach, umieść go w odpowiednich modułach – Phil