gpt4 book ai didi

javascript - 在 ui-router 配置文件中使用 angular-translate 的 $translate.use()

转载 作者:行者123 更新时间:2023-11-29 19:30:34 24 4
gpt4 key购买 nike

我正在尝试在我的 ui-router 配置文件 routes.js 中使用 $translate.use() ,这样我就可以切换带有状态的切换语言,但我得到了一个

未捕获错误:[$injector:modulerr] 由于以下原因无法实例化模块 frontApp:错误:[$injector:unpr] 未知提供者:$translate

这是我的文件。

'use strict';

(function() {
angular.module('frontApp')
.run(['$rootScope', '$state', '$stateParams', function($rootScope, $state, $stateParams) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
}]
)
.config(['$urlRouterProvider', '$stateProvider', '$locationProvider', '$translate', function($urlRouterProvider, $stateProvider, $locationProvider, $translate){
$urlRouterProvider
.otherwise('/');
$stateProvider
.state('home', {
url: '/',
templateUrl: '/views/home.html',
controller: 'HomeCtrl'
})
.state('home.rules', {
url: '^/rules',
templateUrl: '/views/rules.html'
})
.state('home.terms', {
url: '^/terms',
templateUrl: '/views/terms.html'
})
.state('home.faq', {
url: '^/faq',
templateUrl: '/views/faq.html'
})
.state('language', {
controller: function() {
console.log('ok');
$translate.use(($translate.use() === 'fr') ? 'en' : 'fr' );
}
});
$locationProvider.html5Mode(true);
}]);
}());

我还有一个包含我的翻译的 translation.js 文件,当我不尝试在上面的 routes.js 文件中注入(inject)和使用 $translate.use() 时,我使用 TranslateController 使用它没有问题:

'use strict';

(function() {
angular.module('frontApp')
.config(['$translateProvider', function($translateProvider) {
$translateProvider
.translations('fr', {
language: 'English',
otherLanguage: 'en',
cssClass: 'french',
linkHome: 'Accueil',
linkRules: 'Règlement',
linkTerms: 'Termes et conditions',
linkFAQ: 'FAQ',
})
.translations('en', {
language: 'Français',
otherLanguage: 'fr',
cssClass: 'english',
linkHome: 'Home',
linkRules: 'Rules',
linkTerms: 'Terms and conditions',
linkFAQ: 'FAQ',
});
$translateProvider.preferredLanguage('fr');
}])
.controller('TranslateController', ['$translate', '$scope', '$location', function ($translate, $scope, $location) {
// The URLs need to be updated
var host = $location.host();
if ( host === 'localhost' || host === '0.0.0.0') {
$translate.use('fr');
}
else if (host === 'localhost-en') {
$translate.use('en');
}
$scope.switchLanguage = function() {
$translate.use(($translate.use() === 'fr') ? 'en' : 'fr' );
};
}]);
}());

这是 app.js:

'use strict';

angular
.module('frontApp', [
'ui.router',
'ngAnimate',
'ngCookies',
'ngResource',
'ngSanitize',
'ngTouch',
'pascalprecht.translate'
]);

我错过了什么?非常感谢您的时间和帮助。

最佳答案

这里的解决方案是将“$translate”的 DI 定义移动到它所属的位置,即移动到 controller 定义中:

 .state('language', {
// instead of this
// controller: function() {

// use this
controller: function($translate) {

console.log('ok');
$translate.use(($translate.use() === 'fr') ? 'en' : 'fr' );
}
});

或者更好的controller: ['$translate', function($translate) {... }]

为什么当前的解决方案有效?好吧,让我们看一下上面代码的摘录:

// I. CONFIG phase
.config(['$urlRouterProvider', '$stateProvider', '$locationProvider', '$translate'
, function($urlRouterProvider, $stateProvider, $locationProvider, $translate){
...
$stateProvider
...
.state('language', {
// II. CONTROLLER - RUN phase
controller: function() {

正如我们所见,我们在 config 阶段要求 $translate。所以我们收到 vendor ...进行配置。

但是 Controller 定义期望提供服务 - 已经配置。它必须有自己的DI ...因为它会在RUN阶段执行...

另请查看此问答以了解有关配置阶段和运行阶段的提供程序的更多详细信息 - Getting Error: Unkown provider: $urlMatcherFactory

关于javascript - 在 ui-router 配置文件中使用 angular-translate 的 $translate.use(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27879180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com