Angular 1.5 Component Bindings: Überprüfen Sie, ob Callback vorhanden ist

8

Ich habe eine einfache contactList -Komponente, die 2 Bindungen hat: contacts und onRemove .

  • contacts ist nur ein Array von anzuzeigenden Kontakten
  • onRemove ist eine Rückruffunktion
%Vor%

Ich verwende diese Komponente mehrmals in meiner App. Und der onRemove Callback kann sich anders verhalten, abhängig von wo die contactList Komponente verwendet wird. Beispiel:

  • contactMainView (= Komponente) zeigt eine Suchleiste und die resultierende Kontaktliste mit der Komponente contactList an. onRemove löscht den Kontakt aus der Datenbank.

  • groupMembersView zeigt alle Kontakte, die zu der angegebenen Gruppe gehören, mit der Komponente contactList an. Hier sollte es nicht möglich sein, einen Kontakt zu entfernen, obwohl onRemove nicht gesetzt ist.

Ideen:

Zuerst dachte ich, dass ich ein ng-if="$ctrl.onRemove" verwenden könnte, aber das funktioniert nicht, weil onRemove niemals undefined in contactList component ist. console.log(this.onRemove) druckt immer: function(locals) { return parentGet(scope, locals); }

Natürlich könnte ich eine andere showRemove: '@' -Bindung verwenden, aber das sieht für mich nicht DRY aus.

Haben Sie eine Idee oder eine bessere Lösung, um die Dinge zu erledigen?

    
Benjamin M 11.08.2016, 15:12
quelle

2 Antworten

14

Der einfachste Weg wäre zu überprüfen, ob das Attribut definiert ist. In deinem Controller injiziere $attrs und dann kannst du:

%Vor%

Mit dem Bindungswinkel & wird die Funktion umbrochen, um Verweise auf das ursprüngliche $scope der übergebenen Methode beizubehalten, auch wenn sie nicht definiert ist.

    
Sebastian Sebald 12.08.2016, 09:47
quelle
0

Führen Sie die Funktion onRemove on component allow aus, wenn eine Funktion in Parameter übergeben wurde. Sie können also ng-if="$ ctrl.onRemove ()"

verwenden %Vor%     
Silvinus 12.08.2016 09:55
quelle