多语言应用程序中的Angular JS路由不起作用
Angular JS routing in multilanguage app is not working
我正在尝试实现一个多语言应用程序。我需要通过在控制器名称之前的URL中添加一个两个字母的iso参数来访问所请求的语言。例如:http://appPath/en/homehttp://appPath/fr/homehttp://appPath/ar/home
$stateProvider
.state('home', {
url: '/home',
templateUrl: baseTemplateUrl + "home.html",
controller: 'homeController'
})
.state('login', {
url: '/login',
templateUrl: baseTemplateUrl + "login.html",
controller: 'loginController'
})
.state('customers', {
url: '/customers',
templateUrl: baseTemplateUrl + "customers.html",
controller: 'customersController'
})
.state('signup', {
url: '/signup',
templateUrl: baseTemplateUrl + "signup.html",
controller: 'signupController'
});
我现在正在使用一个基本的stateprovider进行路由。你知道如何改变这个功能吗?
提前谢谢你,
更新
对于任何有同样问题的人,我的解决方案是:
将每个状态更改为以下
.state('signup', {
url: '/:lang/signup',
templateUrl: baseTemplateUrl + "signup.html",
controller: 'signupController',
resolve: {
lang: ['$stateParams', function ($stateParams) {
document.cookie = "lang=" + $stateParams.lang;
}]
}
});
我将$stateParams lang的值保存到cookie中,这样您就可以通过app.run()访问它,并将其传递给我的translationService,因为那里还没有初始化$stateParams。
这样,你的应用程序只能在html5mode=false的情况下工作。这意味着你总是会在URL中看到一个丑陋的标签(http://path/#/{lang}/{controllername}为了解决这个问题,我这样配置$locationProvider:
$locationProvider.html5Mode(true).hashPrefix('!');
并通过在index.html文件的标签中插入以下行来设置网站的基本url:
<base href="/">
感谢
添加语言代码作为url参数
$stateProvider
.state('home', {
url: '/:langcode/home',
templateUrl: baseTemplateUrl + "home.html",
controller: 'homeController'
});
在控制器中,使用$stateParams
获取langcode
值
$scope.language = $stateParams.langcode;
相关文章:
- 使用Ampersand.js路由模块化应用程序
- 在node-js路由中发出http请求
- angular js路由不起作用
- 聚合物和页面.js路由中的通配符
- Backbone.js路由和滚动位置
- 通过Node.js路由http请求
- Vue.js路由未处理任何方法
- 多语言应用程序中的Angular JS路由不起作用
- 正在计算Angular JS路由路径
- 带斜杠-中断路由的节点JS路由参数
- 如何将angular js路由用于node js应用程序
- Ember.js:路由返回多个模型,包括一个promise,给出错误
- 角度 js 路由提供程序中的问题
- 如何根据不同的角度js路由值选择不同的模板
- 当我在快速.js路由文件中使用 socket.io 时重复
- 主干.js路由 - 将键/值附加到 URL
- 角度JS路由不起作用
- AngularJS要求JS路由提供程序卡在主页上
- 如何在角度 JS 路由中保留模板视图
- 节点 JS 路由 URL 冲突