2013-11-01 52 views
1

我最近从ui-router 0.0.1迁移到0.2.0。自迁移以来,ui-router无法解析需要注入视图控制器的命名依赖关系。下面是其正常工作与版本0.0.1但版本0.2.0角度ui路由器无法解析命名依赖关系

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; 
}]); 

我得到的错误“未知提供商: i18nProvider < - 国际化”使用v0.2.0

时如果我改变决心config来:

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

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

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

+0

你能否创建一个演示该问题的plunkr? – dtabuenc

+0

@dtabuenc我已经更新了plunkr,请看看它。 –

回答

2

这是在上月修正了一个错误:

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

我不相信这是任何目前发布的版本,但你既可以得到最新来自github或自己在你的js文件中进行修改。这只是改变键值,在这一行(你可以在github提交中看到它)。

一个workarround是只是不适合现在改名字....做

resolve :{ 
    i18nService: 'i18nService' 
} 

然后注入i18nService到控制器,而不是国际化。这有点破解,但确实有效(它注入了已解决的服务,而不是承诺)。

+0

我已经看到使用你的方法的另一个问题 - 依赖性得到解决两次 - 一旦解决和一次实例化控制器。 –

+0

是的,当我测试它时,我甚至感到惊讶。 – dtabuenc