Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用角度平移';ui路由器配置文件中的s$translate.use()_Javascript_Angularjs_Angular Ui Router_Angular Translate - Fatal编程技术网

Javascript 使用角度平移';ui路由器配置文件中的s$translate.use()

Javascript 使用角度平移';ui路由器配置文件中的s$translate.use(),javascript,angularjs,angular-ui-router,angular-translate,Javascript,Angularjs,Angular Ui Router,Angular Translate,我试图在我的ui路由器配置文件routes.js中使用$translate.use(),这样我就可以使用状态切换语言,但我得到了一个 未捕获错误:[$injector:modulerr]未能实例化模块frontApp,原因是: 错误:[$injector:unpr]未知提供程序:$translate 这是我的档案 'use strict'; (function() { angular.module('frontApp') .run(['$rootScope', '$st

我试图在我的ui路由器配置文件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文件中插入和使用$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定义移到它所属的位置,即移到
控制器
定义:

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

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

      console.log('ok');
      $translate.use(($translate.use() === 'fr') ? 'en' : 'fr' );
    }
 });
或者更好的
控制器:['$translate',函数($translate){…}]

为什么当前解决方案不起作用?好吧,让我们看看上面代码的摘录:

// I. CONFIG phase
.config(['$urlRouterProvider', '$stateProvider', '$locationProvider', '$translate'
       , function($urlRouterProvider, $stateProvider, $locationProvider, $translate){
    ...
    $stateProvider
        ...
        .state('language', {
            // II. CONTROLLER - RUN phase
            controller: function() {
如我们所见,我们在配置阶段要求上面的
$translate
。所以我们收到了提供者。。。待配置

但是控制器定义期望提供一个已配置的服务。它必须有自己的定义。。。因为它将在运行阶段执行


另外,请查看此问答,以了解配置与运行阶段中有关提供商的更多详细信息-

谢谢!实际上,我创建了一个LanguageSwitcher服务,并得到了相同的错误。所以现在在你的帮助下,我们能够正确地使用它。再次感谢!很高兴见到您,先生,祝您愉快;)伟大的图书馆…;)