Come è possibile garantire che i dati da un controller siano stati caricati in una direttiva prima dell'esecuzione della funzione di collegamento?Attendere i dati nel controller prima che la funzione di collegamento venga eseguita nella direttiva AngularJS
Utilizzando pseudo-codice, avrei potuto avere:
<my-map id="map-canvas" class="map-canvas"></my-map>
per il mio html.
Nella mia direttiva potrei avere qualcosa di simile:
app.directive('myMap', [function() {
return{
restrict: 'AE',
template: '<div></div>',
replace: true,
controller: function ($scope, PathService) {
$scope.paths = [];
PathService.getPaths().then(function(data){
$scope.paths = data;
});
},
link: function(scope, element, attrs){
console.log($scope.paths.length);
}
}
}]);
È possibile che questo non funzionerà perché console.log ($ scope.paths.length); verrà chiamato prima che il servizio abbia restituito tutti i dati.
So che posso chiamare il servizio dalla funzione di collegamento ma vorrei sapere se c'è un modo per "attendere" per la chiamata di servizio prima di attivare la funzione di collegamento.
forse è possibile utilizzare un evento nel tuo servizio. (Faccio lo stesso per alcune restrizioni visive di accesso) usa solo '$ scope. $ on (" servizio-evento ", ...' nella tua direttiva e nel tuo servizio '$ rootScope. $ broadcast (" servizio-evento ", payload) ' –
Avere un' scope. $ watch ('percorsi'' nella funzione di collegamento per vedere quando la variabile riceve i dati. –
Proverà http://stackoverflow.com/questions/12497590/how-do-you -handle-asynchronous-data-in-directives-for-angularjs – user2700840