pagina llamar funcion evento ejecutar desde cargar carga bootstrap asincrona archivo antes javascript angularjs angular-ui-router angularjs-service

ejecutar - llamar funcion javascript html sin evento



La resolución del enrutador no se inyectará en el controlador (2)

Así es como trabajo con resolución. Debería recibir una promesa. Entonces creo servicio en consecuencia.

app.factory(''User'', function($http){ var user = {}; return { resolve: function() { return $http.get(''api/user/1'').success(function(data){ user = data; }); }, get: function() { return user; } } });

Esta es la idea principal. También puedes hacer algo como esto con $q

app.factory(''User'', function($q, $http){ var user = {}; var defer = $q.defer(); $http.get(''api/user/1'').success(function(data){ user = data; defer.resolve(); }).error(function(){ defer.reject(); }); return { resolve: function() { return defer.promise; }, get: function() { return user; } } });

Estos son casi idénticos en acción. La diferencia es que, en el primer caso, el servicio comenzará a recuperar la fecha cuando llame al método de servicio resolve() y, en el segundo ejemplo, comenzará a recuperar cuando se cree un objeto de fábrica.

Ahora en tu estado.

$stateProvider.state(''app.index'', { url: ''/me'', templateUrl: ''/includes/app/me.jade'', controller: function ($scope, $rootScope, User) { $scope.user = User.get(); console.log($scope.user); }, controllerAs: ''vm'', resolve: { auser: function(User) { return User.resolve() } } });

He intentado todo para obtener la resolución de ui-enrutador para pasar su valor al controlador dado-AppCtrl. Estoy usando la inyección de dependencia con $inject , y eso parece causar los problemas. ¿Qué me estoy perdiendo?

Enrutamiento

$stateProvider.state(''app.index'', { url: ''/me'', templateUrl: ''/includes/app/me.jade'', controller: ''AppCtrl'', controllerAs: ''vm'', resolve: { auser: [''User'', function(User) { return User.getUser().then(function(user) { return user; }); }], } });

Controlador

appControllers.controller(''AppCtrl'', AppCtrl); AppCtrl.$inject = [''$scope'', ''$rootScope'']; function AppCtrl($scope, $rootScope, auser) { var vm = this; console.log(auser); // undefined ... }

Editar Aquí hay un plunk http://plnkr.co/edit/PoCiEnh64hR4XM24aH33?p=preview


Cuando utiliza el argumento de resolución de ruta como inyección de dependencia en el controlador vinculado a la ruta, no puede usar ese controlador con la directiva ng-controller porque el proveedor de servicios con el nombre aname no existe. Es una dependencia dinámica que el enrutador inyecta cuando crea una instancia del controlador para que se vincule en su respectiva vista parcial.

Recuerde también devolver $timeout en su ejemplo, porque devuelve una promesa; de lo contrario, su argumento se resolverá sin ningún valor, tal es el caso si usa $http u otro servicio que devuelva una promesa.

es decir

resolve: { auser: [''$timeout'', function($timeout) { return $timeout(function() { return {name:''me''} }, 1000); }],

En el controlador, inyecta la dependencia de resolución.

appControllers.controller(''AppCtrl'', AppCtrl); AppCtrl.$inject = [''$scope'', ''$rootScope'',''auser'']; //Inject auser here function AppCtrl($scope, $rootScope, auser) { var vm = this; vm.user = auser; }

en la vista en lugar de ng-controller, use la directiva ui-view :

<div ui-view></div>

Manifestación