2014-03-04 135 views
0

我正在使用angular-ui-router,並且我有一個解決方案,可以通過服務從數據庫中獲取一些數據。如何在angular-ui-router中向預定義的控制器注入服務

現在我想注入到我的控制器。

但是,我的控制器沒有在狀態中定義,而只是在我的應用程序中。

這個樣子的:

.state('myState', { 
    url: "/create", 
    templateUrl: "views/create.html", 
    resolve: { 
     templates : function(templateService){ 
      return templateService.allMetadata.query({}, function(data){ 
      }, function(err){ 
      console.log(err); 
      }); 
     } 
    }, 
    controller: 'createCtrl' 

所以,我怎麼能注入我的模板到我createCtrl這是別處定義。 試圖把我的依賴注入createCtrl沒有奏效。似乎我唯一的選擇是在state刪除內部放棄我的控制器。這顯然非常糟糕。

任何解決方案?

+0

如果templateService.allMetadata.query()是異步的,那麼確保從解析函數返回一個promise。然後將「模板」注入您的控制器。 –

回答

1

您需要以某種方式返回異步操作的承諾。假設templateService.allMetadata.query()沒有返回一個承諾,請嘗試這樣的事情。然後將「模板」注入您的控制器。

如果您可以修改它以返回承諾,請執行此操作。

.state('myState', { 
    url: "/create", 
    templateUrl: "views/create.html", 
    resolve: { 
     templates : function(templateService, $q){ 
      var deferred = $q.defer(); 
      templateService.allMetadata.query({}, function(data){ 
       deferred.resolve(data); 
      }, function(err){ 
      console.log(err); 
      deferred.reject(); 
      }); 
      return deferred.promise; 
     } 
    }, 
    controller: 'createCtrl'