如何将服务注入到角度UI路由器中的预定义控制器



我正在使用Angular-UI-router,我有一个解决方案,通过服务从DB中给我带来一些数据。

现在我想将其注入我的控制器。

但是,我的控制器不是在状态中定义的,而只是在我的应用程序中定义的。

这看起来像这样:

 .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的克莱里贴花我的控制器。这显然是非常糟糕的。

有什么解决办法吗?

无论如何,您需要返回异步操作的承诺。 假设 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'

最新更新