I've got a simple contactList
component, which has 2 bindings: contacts
and onRemove
.
contacts
is just an array of contacts to displayonRemove
is a callback function
app
.component('contactList', {
template:
`<div ng-repeat="c in $ctrl.contacts">
{{c.name}}
<div ng-click="$ctrl.onRemove({contact: c})">Remove</div>
</div>`,
bindings: {
contacts: '<',
onRemove: '&'
},
controller: function() {}
})
I use this component multiple times within my app. And the onRemove
callback can behave differently, depending on where the contactList
component is getting used. Example:
contactMainView
(= component) displays a search bar and the resulting list of contacts using thecontactList
component.onRemove
will delete the contact from the database.groupMembersView
displays all contacts belonging to the given group using thecontactList
component. Here it shouldn't be possible to remove a contact, thoughonRemove
will not be set.
Ideas:
First I thought, that I could use an ng-if="$ctrl.onRemove"
but that doesn't work, because onRemove
is never undefined
within contactList
component. console.log(this.onRemove)
always prints: function(locals) { return parentGet(scope, locals); }
Of course I could use another showRemove: '@'
binding, but that doesn't look DRY to me.
Do you have any idea or some better solution to get things done?
console.log(this.onRemove());
throws an exception somewhere in the code when I pass some function toon-remove="..."
, But it printsundefined
when it's no defined. – Interpellation