Kodda boru kullanmak mümkün mü?


106

Özel borumu bir şablonda kullandığımda, bu şöyle:

{{user|userName}}

Ve iyi çalışıyor.

Kodda boru kullanmak mümkün mü?

Bunu şu şekilde kullanmaya çalışıyorum:

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

Ama gösteriyor

userName tanımlı değil

Alternatif yolum db.collection.findOne()kodu manuel olarak kullanmaktır . Ama herhangi bir akıllıca yolu var mı?


Bunun gibi bir şablon kullanamazsınız, boruyu müteahhitinize enjekte etmelisiniz
Yoann Prot

üzgünüm, netleştireceğim. Ben zaten boruları enjekte ediyorum
Hongbo Miao

Kodda hangi boruyu kullanmaya çalışıyorsunuz? Bu senin özel pipon mu?
Siva

1
...Angular tarafından idam edilmediğinden beri yapabileceğini sanmıyorum . ES6 dizge enterpolasyonu ...
Thierry Templier

Yanıtlar:


115

Önce providersmodülünüzdeki boruyu bildirin:

import { YourPipeComponentName } from 'your_component_path';

@NgModule({
  providers: [
    YourPipeComponentName
  ]
})
export class YourServiceModule {
}

O zaman @Pipebunun gibi bir bileşende kullanabilirsiniz :

import { YourPipeComponentName } from 'your_component_path';

class YourService {

  constructor(private pipe: YourPipeComponentName) {}

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

1
Güzel gözüküyor! Ancak bazı nedenlerden dolayı bağımlılık enjeksiyonu borumu kurucuya enjekte edemiyor, ancak html'de sorunsuz bir şekilde kullanılabiliyor. Başka bir modülde beyan edildi ve ihraç edildi, belki de sağlayıcılar listesinde olması gerekiyor? Yeni bir MyPipe örneği oluşturmak ve kullanmak yine de işe yarıyor. Sadece DI'nın bir sorunu var ...
Sam

19
@Sam Gerçekten de providers. Ekle YouPipeComponentNameadresinden Müşteri providersve bu yöntem mükemmel çalışacaktır.
SrAxi

4
Ayrıca doğru sağlayıcılara eklediğinizden emin olun. Boruyu global olarak kullanmak istiyorsanız, app.module sağlayıcılarına koyun. Sadece bazı tembel yüklenen modüllerde kullanmak istiyorsanız, kendi modül sağlayıcılarına koyun
Phil

Yanlış içe aktarma yolu. Boru sıkma @ angular / common
Andris

@Andris ben düzenledim. Bu bir hataydı. Demek istediğim, boru modülünüzü içe aktarmalısınız.
saghar.fadaei

107

@Siva doğru. Ve teşekkürler!

Dolayısıyla boruyu bileşende kullanmanın yolu şu şekildedir:

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

Bağlantı başka benzer soruya.


3
Bu işe yarıyor, ancak muhtemelen Angular en iyi uygulamaları / tercih edilen kalıpları takip etmiyor. Diğer yanıtta gösterildiği gibi boruyu yapıcıya bileşen bağımlılığı olarak geçirmek "daha doğrudur".
Josh

bu şekilde herhangi bir performans sorunu yok mu? bazı insanlar bunu her zaman kullanabilir!
Mohammad Kermani

2
Bu, boru kullanmanın tamamen yanlış bir yoludur. Borular özel amaçlı bir sınıftır ve Angular tarafından sağlanan özel yollarla kullanılmalıdır. Bir kanalda uygulanan bazı işlevlere ihtiyacınız varsa, ancak bunu normal bir TypeScript sınıfı gibi kullanacaksanız, o regularsınıfı oluşturmalı ve TS kodunuzda ( your-component.tsörneğin) kullanmalısınız. Boruda aynı işlevselliğe ihtiyacınız varsa, bu regularsınıfı borudan da her zaman kullanabilirsiniz .
Alexander Abakumov

En büyük fark, bu yolla sınıfın daha fazla örneğini yaratmanızdır. Angular sözdizimi kullanıldığında, bir tekil gibi davranır ve sadece bir kez somutlaştırılır.
Sir2B
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.