Chciałbym opóźnić inicjalizację kontrolera do momentu, aż niezbędne dane nie dotrą z serwera.Angular.js inicjowanie sterownika opóźniającego
Znalazłem rozwiązanie dla Kątowymi 1.0.1: Delaying AngularJS route change until model loaded to prevent flicker, ale nie mógł on pracować z Kątowymi 1.1.0
Szablon
<script type="text/ng-template" id="/editor-tpl.html">
Editor Template {{datasets}}
</script>
<div ng-view>
</div>
JavaScript
function MyCtrl($scope) {
$scope.datasets = "initial value";
}
MyCtrl.resolve = {
datasets : function($q, $http, $location) {
var deferred = $q.defer();
//use setTimeout instead of $http.get to simulate waiting for reply from server
setTimeout(function(){
console.log("whatever");
deferred.resolve("updated value");
}, 2000);
return deferred.promise;
}
};
var myApp = angular.module('myApp', [], function($routeProvider) {
$routeProvider.when('/', {
templateUrl: '/editor-tpl.html',
controller: MyCtrl,
resolve: MyCtrl.resolve
});
});
Przykład pracy: http://jsfiddle.net/dTJ9N/5 – mb21
Powiedziałbym, że Uderzenie wydajności za zawijanie obietnicy $ http z inną obietnicą w tym przypadku jest tak małe, że nie warto się tym przejmować. Jednak bardziej zwięzły kod wynikający z wyłączenia dodatkowej obietnicy jest godnym pościgiem. –
Kod jest ładny i czysty, ale na dzień dzisiejszy skrzypce są zepsute, pokazuje źródło dokumentu. Zbyt nowi dla Angulara, aby pomóc, nie wspominając o tym. – enigment