2016-03-17 220 views
0

未定義功能我有一個看起來像下面角UI路由器控制器

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

的Question.query()函數看起來像

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); 
       }); 
      }); 
     }; 

和控制器應該有一個UI路線問題在這樣的開始預存

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

    $scope.questions = questions_preload; 

不幸的是雖然Question.query ()方法正確運行了我認爲數組未定義的questions_preload,當控制器執行時。

我相信這是與查詢功能中的延遲有關嗎? 有沒有人有任何想法?

謝謝, 馬克。

回答

1

你必須在questions_preload價值注入到你的控制器:

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

當你有它,你簡單地訪問一個未定義的變量。

Question.query()中的承諾的使用在這裏並不重要,因爲角度ui路由器將等待承諾解除之後,它實例化您的控制器。

+0

對不起,我沒看到,我還沒有注入較早和修改,但仍然我只是得到 錯誤:[$注射器:unpr]未知提供商:questions_preloadProvider < - questions_preload < - QuestionController 感謝鄧肯雖然響應 –

+1

你確定你沒有試圖在其他地方實例化控制器嗎?例如直接從你的HTML。您應該能夠在由ui-router實例化時注入該值,但在其他時間不可用。 (只是猜測在這裏,否則我不明白爲什麼你會得到這個錯誤) – Duncan

+0

真棒鄧肯!我不知道ui.router是在實例化控制器,並且我擁有的ng-controller也正在實例化另一個控制器。 如何將此標記爲答案? –