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 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.
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?
Der einfachste Weg wäre zu überprüfen, ob das Attribut definiert ist. In deinem Controller injiziere $attrs
und dann kannst du:
Mit dem Bindungswinkel &
wird die Funktion umbrochen, um Verweise auf das ursprüngliche $scope
der übergebenen Methode beizubehalten, auch wenn sie nicht definiert ist.
Tags und Links angularjs angularjs-directive angularjs-components angularjs-bindings