我最近从ui-router 0.0.1迁移到0.2.0。自迁移以来,ui-router无法解析需要注入视图控制器的命名依赖项。这里的示例代码适用于ver 0.0.1但在ver 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
}
},
一切正常。这是预期的行为,还是我错过了一些配置?
答案 0 :(得分:2)
这是上个月修复的错误:
https://github.com/angular-ui/ui-router/commit/4cdadcf46875698aee6c3684cc32f2a0ce553c45
我不相信它在任何当前发布的版本中,但您可以从github获取最新版本,或者在您的js文件中自行更改。它只是在一行中更改键值(您可以在github提交中看到它)。
一个改变方法是暂时不改变名称....做
resolve :{
i18nService: 'i18nService'
}
然后将i18nService
注入您的控制器而不是i18n。这有点像黑客,但它确实有效(它注入解决的服务而不是承诺)。