1

我最近从 ui-router 0.0.1 迁移到 0.2.0。自迁移以来,ui-router 无法解析需要注入视图控制器的命名依赖项。这是适用于 0.0.1 版但在 0.2.0 版中失败的示例代码

angular.module( 'sample.test', [
 'ui.router',
 'i18nService'
])

.config(function config($stateProvider) {
    $stateProvider.state( 'mystate', {
      url: '/mystate',
      resolve: {i18n: 'i18nService'},
      views: {
        'main': {
          controller: 'MyCtrl',
          templateUrl: 'templates/my.tpl.html'
        }
      }
    });
})

.controller('MyCtrl', ['i18n', function(i18n) {
   // fails to resolve i18n
}]);

i18nService 是一个返回承诺的简单服务

angular.module('i18nService', [])
.factory('i18nService', ['$http', '$q', function($http, $q) {
  var deferred = $q.defer();
  $http.get('..').then(..);

  return deferred.promise;
}]);

使用 v0.2.0 时出现错误“Unknown provider: i18nProvider <- i18n”

如果我将解析配置更改为:

      resolve: {
        i18n: function(i18nService) {
          return i18nService
        }
      },

一切正常。这是预期的行为,还是我缺少一些配置?

这是 plunker:http ://plnkr.co/edit/johqGn1CgefDVKGzIt6q?p=preview

4

1 回答 1

2

这是上个月修复的错误:

https://github.com/angular-ui/ui-router/commit/4cdadcf46875698aee6c3684cc32f2a0ce553c45

我不相信它存在于任何当前发布的版本中,但您可以从 github 获取最新版本,也可以自己在 js 文件中进行更改。它只是在这一行中将键更改为值(您可以在 github 提交中看到它)。

一个解决方法是暂时不要更改名称....

resolve :{
  i18nService: 'i18nService'
}

然后注入i18nService你的控制器而不是 i18n。这有点像黑客,但它确实有效(它注入了已解决的服务而不是承诺)。

于 2013-11-02T06:05:31.783 回答