2015-05-07 50 views
3

我已經看到了其他答案,至今沒有任何幫助。我得到這個錯誤與下面的代碼在一個文件:

angular.module('myApp.page', ['ngRoute']) 
     .config(['$routeProvider', function($routeProvider) { 
      $routeProvider.when('/page/:pageId', { 
       templateUrl: 'page/view.html', 
       controller: 'PageCtrl', 
       resolve: { 
        data: function($q, $http, $routeParams) { 
         var deferred = $q.defer(); 
         $http({method: 'GET', url: 'http://....' + $routeParams.pageId}) 
          .then(function(data) { 
          deferred.resolve(data); 


     }); 
        return deferred.promise; 
       } 
      } 
     }) 
    }]) 
    .controller('PageCtrl', function ($scope, $rootScope, data) { 
//do stuff 
} 

而在app.js我有這樣的:

angular.module('myApp', [ 
    'ui.bootstrap', 
    'ngRoute', 
    'ngTouch', 
    'ngResource', 
    'myApp.page' 
]). 
config(['$routeProvider', function($routeProvider) { 
    $routeProvider.otherwise({redirectTo: '/'}); 
}]). 
config(['$provide', Decorate]) 

一切都正常工作,我拿來用的HTTP方法與數據沒有問題,直到我開始使用Q庫並將數據移入配置部分。有小費嗎?沒有其他答案似乎工作。提前致謝!

+1

這個錯誤使得它聽起來像ChannelCtrl應該有一個名爲數據注入到它的屬性。你要展示的代碼必須做什麼? –

+1

'data'是路由器(基於解析屬性)在實例化控制器時呈現其相應路由的動態依賴關係。如果你使用'PageCtrl'(哦等待OP意味着使用'ChannelCtrl')ng-controller,那麼你會得到這個不存在的稱爲'data'的依賴關係的錯誤。另外'PageCtrol!= PageCtrl'也是'PageCtrl!= channelCtrl',所以可能會有許多錯誤導致這個問題。 – PSL

+0

@PSL抱歉,我在發帖時改了一些名字。我再次編輯,現在它是正確的,就像我的電腦一樣。問題仍然存在,拋開打字錯誤。 –

回答

4

您的問題是由於您正在使用ng-controller指令來實例化控制器PageCtrl,這個動態依賴關係data僅由路由器創建。因此,當通過路由器解析注入動態依賴關係並讓路由器實例化控制器時,您不需要也不應該通過ng-controller實例化控制器,因爲注入器缺少依賴關係可用性,它只會失敗。路由器將管理控制器的實例,併爲您設置相應的視圖。

所以,從您的視圖中刪除ng-controller還要確保路由表示的部分足夠完整,以表示與控制器功能相關的視圖。我也看到這是一個不錯的做法,不要以ng-controller的局部視圖開始,並使用路由實例化,這將有助於使用不同的控制器使該局部視圖更具可重用性。在創建單元測試時,您還可以輕鬆模擬動態依賴關係,並通過$controller服務提供它。

+1

這些天離angular.js還有點距離嗎? –

+0

@ A.B哈哈是啊,它已經有一段時間.. :) – PSL

相關問題