我有一个 LanguageSwitcher 服务和一个 LanguageSwitcher.switchLanguage() 函数,可用于在法语和英语之间切换语言。
我现在正在尝试使用 ui-router 状态来执行该功能,它似乎可以工作,因为我可以在检查但页面时看到标记中的“翻译”类(它在“法语”和“英语”之间切换)变化就像它试图加载一个不存在的视图或其他东西一样变为空白。
因此,我想防止这种行为,并尽可能简单地执行“不改变状态”的功能。
<a ui-sref="language">Toggle</a>
这是 ui-router 配置:
'use strict';
(function() {
angular.module('frontApp')
.run(['$rootScope', '$state', '$stateParams', function($rootScope, $state, $stateParams) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
}]
)
.config(['$urlRouterProvider', '$stateProvider', '$locationProvider', function($urlRouterProvider, $stateProvider, $locationProvider){
$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: ['LanguageSwitcher', function(LanguageSwitcher) {
LanguageSwitcher.switchLanguage();
}]
});
$locationProvider.html5Mode(true);
}]);
}());
这是因为我的菜单是动态的,并且切换不是导航栏的最后一项:
<header ng-controller="NavbarCtrl">
<h1><a class="navbar-brand" ui-sref="home">{{ 'siteTitle' | translate }}</a></h1>
<ul class="nav navbar-nav navbar-right">
<li ng-repeat="item in menu" ui-sref-active="active">
<a ui-sref="{{item.state}}" ng-href="{{item.link}}">{{item.title}}</a>
</li>
</ul>
</header>
navbar.js 文件:
'use strict';
(function() {
angular.module('frontApp').controller('NavbarCtrl', ['$scope', '$translate', '$location', '$rootScope', function ($scope, $translate, $location, $rootScope) {
$rootScope.$on('$translateChangeSuccess', function () {
$translate(['linkHome', 'linkRules', 'linkTerms', 'linkFAQ', 'language', 'otherLanguage', 'linkMainSite']).then(function (translations) {
$scope.menu = [
{
'title': translations.linkHome,
'link': '/',
'state': 'home'
},
{
'title': translations.linkRules,
'link': '/rules',
'state': 'home.rules'
},
{
'title': translations.linkTerms,
'link': '/terms',
'state': 'home.terms'
},
{
'title': translations.linkFAQ,
'link': '/faq',
'state': 'home.faq'
},
{
'title': translations.language,
'link': '/'+translations.otherLanguage,
'state': 'language'
},
//{
// 'title': translations.linkMainSite,
// 'link': 'http://'+translations.linkMainSite,
// 'state': ''
//}
];
//$scope.isActive = function(route) {
// return route === $location.path();
//};
});
});
}]);
}());
我错过了什么?非常感谢您的时间和帮助。