Jak mogę zapewnić, że dane z kontrolera zostały wczytane do dyrektywy przed uruchomieniem funkcji łączenia?Czekaj na dane w kontrolerze przed uruchomieniem funkcji łączenia w dyrektywie AngularJS
Korzystanie psuedo kod, mogę mieć:
<my-map id="map-canvas" class="map-canvas"></my-map>
dla mojego html.
W moim dyrektywy może mam coś takiego:
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);
}
}
}]);
Powyższe nie będzie działać, ponieważ console.log ($ scope.paths.length); zostanie wywołany, zanim usługa zwróci jakiekolwiek dane.
wiem, że mogę zadzwonić do serwisu z funkcji łącza, ale chciałby wiedzieć, czy istnieje sposób, aby „czekać” na wezwanie serwisu przed wypalaniem funkcję łącza.
może można użyć zdarzenia w twojej służbie. (robię to samo dla niektórych ograniczeń dostępu wizualnego) po prostu użyj '$ scope. $ on (" service-event ", ...' w twojej dyrektywie i w twojej usłudze '$ rootScope. $ broadcast (" service-event ", ładowność);.. '' –
Mają zakres zegarek $ ('paths'' w funkcji link, aby zobaczyć, że gdy zmienna pobiera dane –
Postara http://stackoverflow.com/questions/12497590/how-do-you -handle-asynchroniczny-data-in-dyrektywami-for-angularjs – user2700840