2015-10-21 3 views
0

Je dispose d'un fichier de configuration qui contient un état qui ressemble à ce qui suit:

$stateProvider.state('home', { 
    url: '?data', 
    abstract: true, 
    resolve: { 
     data: ['MyModel', '$stateParams', function (MyModel, $stateParams) { 
      return MyModel.getData($stateParams); 
     }] 
    } 
}); 

puis un fichier de module qui ressemble à ceci:

App.module.run(['$rootScope', '$state', function ($rootScope, $state) { 
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams) { 

toParams renverrait object{data:undefined}. Je sais que la résolution fonctionne et devrait avoir des données. Comment puis-je passer correctement la résolution de mon état dans le $stateChangeStart puis y accéder?

J'ai essayé d'injecter ma résolution de données manuellement dans mon fichier de module, mais elle renvoie undefined. Je l'ai essayé de placer l'attribut params pour voir si cela était le chemin à parcourir:

resolve: { 
     data: ['MyModel', '$stateParams', function (MyModel, $stateParams) { 
      return MyModel.getData($stateParams); 
     }] 
    }, 
params: { 
    'foo':'bar', // this would be available in toParams 
    'data': //can i put my data here? 
} 

Répondre

1

Vous devriez simplement pouvoir injecter MyModel dans votre fonction d'exécution, et le lire de la même façon que vous le lire dans votre processus de détermination . Exemple de fonction d'exécution (assume votre fonction getData retourne une promesse):

App.module.run(function($rootScope, MyModel) { 
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams) { 
     // get the same data your resolve is using (you can also pass in toParams or the like) 
     MyModel.getData(toParams).then(function(data){ 
      // do something with your data here inside $stateChangeStart 
     }); 
    }); 
}); 

Ce qui fait une injection grande, vous injectez simplement quelque chose quand vous voulez l'utiliser.

+0

est-ce que cela ne vainc pas l'objet d'avoir une résolution? ou ai-je manqué quelque chose – gardni

+0

Le but habituel d'une résolution est de s'assurer que certaines promesses ont été faites avant de charger la route et le contrôleur. Je ne suis pas exactement sûr pourquoi vous voulez que vos données de résolution dans $ stateChangeStart, mais ma solution fonctionne. –

+0

dans mon stateChangeStart Je ne souhaite autoriser un changement de route que si ma promesse est résolue, car les routes dépendent des données. Donc, si je l'injecte manuellement comme vous le suggérez, je ne suis pas sûr que cela confirme que ma résolution a été résolue si cela a du sens. Votre méthode fonctionne cependant en termes de me fournir les données que je veux. – gardni