2016-03-17 4 views
0

J'ai une fonction route ui qui ressemble à ce qui suitangulaire routeur ui fonction non définie dans le contrôleur

.state('question', { 
     url: '/question', 
     templateUrl: 'views/templates/question.view.htm', 
     controller: 'QuestionController', 
     resolve: { 
      questions_preload: function(Question) { 
       return Question.query(); 
      } 
     } 
    }); 

Le Question.query() ressemble à

Question.query = function() { 
      var deferred = $http.get(HATEOAS_URL); 
      return SpringDataRestAdapter.processWithPromise(deferred).then(function (data) { 
       Question.resources = data._resources("self"); 
       return _.map(data._embeddedItems, function (question) { 
        return new Question(question); 
       }); 
      }); 
     }; 

et le contrôleur qui doit avoir la questions préchargées au début des êtres comme celui-ci

angular.module('myapp').controller('QuestionController', function ($scope, Question) { 

    $scope.questions = questions_preload; 

Malheureusement, la question.query La méthode() exécute correctement le questions_preload qui, selon moi, hébergerait le tableau non défini lors de l'exécution du contrôleur.

Je crois que c'est quelque chose à voir avec le différé dans la fonction de requête? Quelqu'un aurait-il une idée?

Merci, Marque.

Répondre

1

Vous avez injecter la valeur questions_preload dans votre contrôleur:

angular.module('myapp') 
.controller('QuestionController', 
    function ($scope, Question, questions_preload) { 
    ... 
    $scope.questions = questions_preload; 

Comme vous l'aviez-vous accédiez simplement une variable non définie.

L'utilisation d'une promesse dans Question.query() n'a pas d'importance ici car l'ui-routeur angulaire attendra que la promesse soit résolue avant d'instancier votre contrôleur.

+0

Désolé, je ne voyais que je ne l'avais pas injecté plus tôt et modifié mais je viens de faire Erreur: [injecteur $: UNPR] fournisseur inconnu: questions_preloadProvider <- questions_preload <- QuestionController Merci pour la réponse que Duncan –

+1

Etes-vous sûr de ne pas essayer d'instancier le contrôleur ailleurs? par exemple. directement à partir de votre code HTML. Vous devriez être capable d'injecter cette valeur quand instancié par ui-routeur mais il ne serait pas disponible à d'autres moments. (Juste deviner ici, sinon je ne peux pas voir pourquoi vous auriez cette erreur) – Duncan

+0

Awesome Duncan !! Je n'avais aucune idée que le ui.router instanciait le contrôleur et que le ng-controller que j'avais avait aussi instancié un autre contrôleur. Comment puis-je marquer cela comme la réponse ?? –