Dynamische Rohr in den Winkel-2
Ich versuche eine Komponente erstellen, wo Sie passieren können, die pipe, die verwendet werden sollen für eine Liste in der Komponente. Von dem, was ich finden konnte, durch das testen und die Suche nach Antworten die einzige Lösung scheint zu erstellen, so etwas wie:
<my-component myFilter="sortByProperty"></my-component>
my-component
Vorlage:
<li *ngFor="#item of list | getPipe:myFilter"></li>
Denen dann Karten myFilter
auf die richtige pipe-Logik und es läuft, aber das scheint ein bisschen schmutzig und nicht optimal.
Ich dachte, Sie würde kommen mit einer besseren Lösung für dieses problem, da die Winkel 1, wo Sie auch tun würde etwas in dieser Richtung.
Gibt es nicht einen besseren Weg, dies zu tun, im Winkel 2?
- ist getpipe Ihre benutzerdefinierten filter?
- Nicht nur konnte Sie tun dies, AngularJS, Sie können dies auch in Eckig +2. Die Technik ist ähnlich zu dem, was @Balu unten geschrieben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gebäude auf borislemke Antwort, hier ist eine Lösung, die nicht brauchen
eval()
und das finde ich ziemlich sauber:dynamisch.Rohr.ts:
app.- Modul.ts:
app.Komponente.ts:
Error: StaticInjectorError(AppModule)[date]: StaticInjectorError(Platform: core)[date]: NullInjectorError: No provider for date!
DatePipe
zu Ihrem app-Modul ist Anbieter?@Input() pipe
in meinem code, so dass es verwendet werden kann, allgemeinLeider glaube ich nicht so. Es ist das gleiche wie in angular1, wo Sie eine Funktion einen string zurückgeben, der für die dynamische Leitung, die Sie wollen.
Blick auf die docs, die genau wie Sie zeigen es auch.
https://angular.io/docs/ts/latest/guide/pipes.html
Dann im controller:
Ach, es könnte schlimmer sein! 🙂
Ich es geschafft, etwas arbeiten, es ist ein bisschen schmutzig und böse (mit eval), aber es funktioniert der trick für mich. In meinem Fall habe ich die table-Komponente mit verschiedenen Daten-Typen in jeder Zeile (e.g Titel, url, Datum, status). In meiner Datenbank, status ist gekennzeichnet als
1
alsenabled
oder0
fürdisabled
. Natürlich, es ist mehr vorzuziehen, zu zeigen, aktiviert/deaktiviert, um meine user. Auch mein Titel-Spalte ist mehrsprachig, das es ein Objekt mit entwederen
oderid
wie es ist Schlüssel.Ideal, ich brauche 2 verschiedene Rohre zum konvertieren meiner Daten zu zeigen, um meine app-user. So etwas wie
translateTitle
undgetStatus
wird gut gehen. Nennen wir die übergeordnete LeitungdynamicPipe
.Werde ich wohl eine Menge Hass auf die Verwendung von eval. Hoffe, es hilft!
Update: wenn man es mal brauchen könnte
Zurück:
Der einfachste Weg, um diese Situation zu bewältigen wäre, nicht zu verwenden, die Rohre in den HTML-templates, aber stattdessen injizieren Sie das Rohr in die Komponente ein Konstruktor (mit DI), dann wenden Sie den transformieren funktional. Das funktioniert ganz gut mit einem Beobachtbaren Karte oder ähnliches rxjs streams.