【问题标题】:Angularjs routeprovider multiple routes lead to same viewAngularjs routeprovider 多个路由导致相同的视图
【发布时间】:2015-01-08 15:22:34
【问题描述】:

所以,angularjs $routeProvider 的工作流程如下,

    $routeProvider
    .when('/main1', {
        templateUrl: 'view1.html',
    })
    .when('/main2', {
        templateUrl: 'view2.html',
    })

我的问题是,有什么方法可以简化以下代码。如果 when('/main1') 和 when('/main2') 指向同一个模板。所以,

    $routeProvider
    .when('/main1', {
        templateUrl: 'view1.html',
    })
    .when('/main2', {
        templateUrl: 'view1.html',
    })

问这个问题是因为如果我们在网站上有多种语言,并且我们希望对 url 进行多种翻译。

另一个解决方案是识别站点是使用 .com 还是 .de,从而调整到正确的 /main1 或 /main2 翻译。比如,

var url = window.location.href;
var main;
if (url.match(/.de/) !== null){
    main = "/main1";
}else{
   main = "/main2";
}

$routeProvider
.when(main, {
    templateUrl: 'view1.html',
})

但从语义上讲,这似乎不是最好的解决方案,因为我喜欢在配置之后将配置选项设置在运行块中。我们也不能将工厂(只有提供者,我可能弄错了)注入到配置中。

【问题讨论】:

  • 为什么不把它变成像'/main/:lang'这样的东西呢?然后你可以有'main/DE/'或'main/EN/',你可以从$routeParams检测它是哪种语言,它们被一个路由规则覆盖,when('/main/:lang', {template: 'view.html'}
  • 但我更担心面包屑被翻译。例如,对于 .com,我们有 .com/animals/dog。但对于德语,我们将拥有 .de/Tier/Hund。但也许我可以做类似 .com/:animal/:type 之类的操作,然后将德语分配为 Tier 和 Hund?
  • 好的,所以你想要翻译 URL?第一个问题是:您打算如何拥有 .com 和 .de,您说的是 www.webpage.com 和 www.webpage.de 之类的东西吗?因为那不再是同一个域了
  • 这将是一个域的子应用程序,所以假设我们有。 mainapp.com/subapp,如果是mainapp.de/subapp/animals将被使用,如果是mainapp.com/subapp/tier将被使用。
  • 嗯,这意味着一个应用程序标准域,对吗?这意味着您将服务于多个应用程序?

标签: angularjs routing internationalization ngroute


【解决方案1】:

我会将语言作为路径中的第一个 url 段。

$routeProvider.when('/:lng/main', {
    templateUrl: 'main.html',
    controller: function($routeParams){
        var lng = $routeParams.lng;
    }    
})

虽然如果$routeProvider 能够提供可以隔离 url 段的功能,那就太好了。我把:lng 放在每条路线上并不是很漂亮。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2019-05-05
    • 2015-04-07
    相关资源
    最近更新 更多