2013-11-01 104 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