Me gustaría retrasar la inicialización de un controlador hasta que los datos necesarios hayan llegado del servidor.Angular.js que retrasa la inicialización del controlador
He encontrado esta solución para 1.0.1 Angular: Delaying AngularJS route change until model loaded to prevent flicker, pero no pude conseguir que el trabajo con la plantilla angular 1.1.0
<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
});
});
Ejemplo de trabajo: http://jsfiddle.net/dTJ9N/5 – mb21
Yo diría que el El rendimiento alcanzado para cumplir la promesa de $ http con otra promesa en este caso es tan pequeño que no vale la pena preocuparse por ello. Sin embargo, el código más conciso resultante de la exclusión de la promesa adicional es una actividad digna. –
El código es agradable y limpio, pero a partir de hoy, el violín está roto, muestra el origen del documento. Demasiado nuevo en Angular para ser de mucha ayuda más allá de notar eso. – enigment