I'm writing an Angular 1.5 directive and I'm running into an obnoxious issue with trying to manipulate bound data before it exists.
Here's my code:
app.component('formSelector', {
bindings: {
forms: '='
},
controller: function(FormSvc) {
var ctrl = this
this.favorites = []
FormSvc.GetFavorites()
.then(function(results) {
ctrl.favorites = results
for (var i = 0; i < ctrl.favorites.length; i++) {
for (var j = 0; j < ctrl.forms.length; j++) {
if (ctrl.favorites[i].id == ctrl.newForms[j].id) ctrl.forms[j].favorite = true
}
}
})
}
...
As you can see, I'm making an AJAX call to get favorites and then checking it against my bound list of forms.
The problem is, the promise is being fulfilled even before the binding is populated... so that by the time I run the loop, ctrl.forms is still undefined!
Without using a $scope.$watch (which is part of the appeal of 1.5 components) how do I wait for the binding to be completed?
I had a similar issue, I did this to avoid calling the component until the value I am going to send is ready:
<form-selector ng-if="asyncValue" forms="asyncValue" ></form-selector>