can ngOptions eine Funktion aufrufen, um Anzeigetext zu erhalten?

8

Ich habe ein select -Tag, das ich mit AngularJS an ein Array von Radiostationsobjekten binde. Mein Objekt hat folgende Eigenschaften:

%Vor%

Ich möchte, dass jedes Element im Dropdown-Feld "{id} - {name} - {frequency}" als Anzeigetext anzeigt, aber da die Eigenschaft name optional ist, möchte ich doppelte Bindestriche vermeiden Event, dass ein Objekt keinen Wert für seinen Namen hat.

Ich konnte das funktionieren lassen:

%Vor%

Was sind die Regeln / Richtlinien / Best Practices zum Aufruf einer Funktion in ng-options? Ich möchte etwas wie getDisplayText(s) machen - was macht den Ausdruck "gültig für eckig"? Muss die Funktion innerhalb des Bereichs definiert werden? Kann es irgendeine extern definierte Funktion sein? Ist dies der beste Ansatz für die gewünschte Funktionalität?

    
Brian Oliver 14.02.2014, 16:51
quelle

3 Antworten

6
  

Ist es möglich, eine Funktion innerhalb von ng-options aufzurufen?

Kurze Antwort: ja. (Ein schneller Test hätte das auch für dich beantwortet.)

Längere Antwort: Mit ng-options können Sie einen beliebigen Ausdruck (solange er für Angular gültig ist) in den beiden Bereichen label und value des Optionsverständnisses angeben (siehe die Dokumente ). Das bedeutet, dass Sie eine Funktion angeben können, die im Bereich verfügbar ist, um Ihre label -Zeichenfolge zu erstellen.

Aktualisierung:

Der von ng-options als Label verwendete Wert wird generiert, indem die angegebene Zeichenfolge konsumiert und an $parse übergeben wird, um einen auswertbaren Ausdruck zu generieren, der später aufgerufen wird. Dieser Ausdruck wird dann gegen die scope mit den zusätzlichen lokalen Werten aus der Schleife ausgeführt, um tatsächlich die angezeigte Zeichenfolge zu generieren. Der Ausdruck kann grundsätzlich alles, was Sie in {{ interpolation }} eingeben (Interpolationen werden auch mit $parse ausgeführt werden, wenn ich mich irre), was verkettete Strings beinhalten kann, die Funktionen aufrufen, die auf dem Scope sichtbar sind (was tatsächlich existieren könnte) ein übergeordneter Bereich und vererbt werden), Angular Filter (zB lowercase oder json ), etc.

Im Hinblick auf Best Practices würde ich sagen, dass Ihre ursprüngliche Anzeige von s.id+ ' - ' + s.name + ' - ' + s.frequency wahrscheinlich als Ausdruck gut ist, anstatt sie zu einer Funktion im Bereich zu extrahieren. Es ist jedoch leicht komplex und das Hinzufügen der Bedingung, die Sie wünschen, würde es definitiv über den Rand zu einer Funktion (obwohl es als Ausdruck mit einem ternären möglich ist) schieben. Im Allgemeinen, wenn die Anzeigelogik komplex ist oder wenn dieselbe Logik an mehreren Stellen verwendet wird, sollte sie in eine Funktion oder sogar einen Filter extrahiert werden, abhängig davon, wie allgemein sie ist.

    
squid314 14.02.2014, 16:58
quelle
11

das hat bei mir funktioniert:

%Vor%     
koolunix 14.02.2014 16:58
quelle
0

Es ist ein wenig in der Dokumentation versteckt, aber es kann leicht erreicht werden.

In Ihrem Fall ist die Syntax wie folgt dokumentiert:

%Vor%

Und so für Sie brauchen:

%Vor%     
NicolasP 27.10.2017 08:40
quelle

Tags und Links