AngularJS 多语言 URL 带链接的路由
AngularJS multilanguage URL routing with links
我有一个 AngularJS 网络应用程序。我正在更改应用程序,以便 URL 可以是多语言的(用于 SEO 索引目的)。
我正在设置我的 app.js,像这样:
$routeProvider.when('/:language', {templateUrl: 'partials/home.html', controller: 'HomeCtrl'});
$routeProvider.when('/:language/about', {templateUrl: 'partials/about.html', controller: 'AboutCtrl'});
然后,在一个服务中,我使用 $routeParams 获取语言参数,并使用 angular-translate 调用我的翻译代码以提供相应语言的页面。
到目前为止一切正常。
但是现在,我所有的内部链接,即 <a href="/about">{{'ABOUT' | translate}}</a>
都停止工作了,因为它们缺少语言参数。
我的方法是在服务中设置语言并将其连接到链接中,类似于 <a href="{{TranslationService.getLanguage()}}/about">{{'ABOUT' | translate}}</a>
。当然,这会让我重构我所有的链接。
这是正确的方法还是有更好更聪明的方法?
您可以使用 ui-router 插件并将您的路由定义为嵌套。
https://github.com/angular-ui/ui-router/wiki/URL-Routing#url-routing-for-nested-states
$stateProvider
.state('home', {
url: '/:language',
...
})
.state('home.about', {
url: '/about',
...
});
然后,您可以使用 ui-sref 指令并使用相对路径导航路线。
home.html
: 去'About'子路由<a ui-sref=".about">About</a>
about.html
:去父路由<a ui-sref="^">Home</a>
我终于按照上面描述的方法进行了。使用 UI-Router 可能是最好的方法,但更改对我的开发产生了 medium/big 影响。
我有一个 AngularJS 网络应用程序。我正在更改应用程序,以便 URL 可以是多语言的(用于 SEO 索引目的)。
我正在设置我的 app.js,像这样:
$routeProvider.when('/:language', {templateUrl: 'partials/home.html', controller: 'HomeCtrl'});
$routeProvider.when('/:language/about', {templateUrl: 'partials/about.html', controller: 'AboutCtrl'});
然后,在一个服务中,我使用 $routeParams 获取语言参数,并使用 angular-translate 调用我的翻译代码以提供相应语言的页面。
到目前为止一切正常。
但是现在,我所有的内部链接,即 <a href="/about">{{'ABOUT' | translate}}</a>
都停止工作了,因为它们缺少语言参数。
我的方法是在服务中设置语言并将其连接到链接中,类似于 <a href="{{TranslationService.getLanguage()}}/about">{{'ABOUT' | translate}}</a>
。当然,这会让我重构我所有的链接。
这是正确的方法还是有更好更聪明的方法?
您可以使用 ui-router 插件并将您的路由定义为嵌套。
https://github.com/angular-ui/ui-router/wiki/URL-Routing#url-routing-for-nested-states
$stateProvider
.state('home', {
url: '/:language',
...
})
.state('home.about', {
url: '/about',
...
});
然后,您可以使用 ui-sref 指令并使用相对路径导航路线。
home.html
: 去'About'子路由<a ui-sref=".about">About</a>
about.html
:去父路由<a ui-sref="^">Home</a>
我终于按照上面描述的方法进行了。使用 UI-Router 可能是最好的方法,但更改对我的开发产生了 medium/big 影响。