如何将服务注入angular-ui-router中的预定义控制器

时间:2014-03-04 18:16:41

标签: angularjs angular-ui 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 decleration内部对我的控制器进行decalre。这显然非常糟糕。

任何解决方案?

1 个答案:

答案 0 :(得分:1)

您需要以某种方式返回异步操作的承诺。假设templateService.allMetadata.query()没有返回promise,请尝试这样的事情。然后将“模板”注入控制器。

如果您可以修改它以返回承诺,请执行此操作。

 .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'