基于国家的路由

时间:2017-08-09 11:37:50

标签: javascript angularjs routing angularjs-routing

我正在尝试根据国家/地区显示唯一页面。我指的是耐克网站。 https://www.nike.com/sg/en_gb/。在这里,用户可以选择区域/国家:

如何使用Routing Param而不是路径来实现。我想使用Routing params或更好的解决方案(如果有的话)来实现。

查看

<body ng-controller="CountryController">
    <form>
      <select name="naver" id="naver" ng-model="route.selectedRoute" ng-change="RedirecttoCountry(route.selectedRoute)">
        <option value="/" >Home</option>
        <option value="/US">US</option>
        <option value="/UK">UK</option>
        <option value="/India">India</option>
      </select>
    </form>
    <div ng-view=""></div>

我为每个国家/地区都有单独的htmls。

控制器

var app = angular.module("myApp", ['ngRoute']);

app.config(function($routeProvider){
    $routeProvider
        .when('/', {
            templateUrl: "US.html",
            controller: 'CountryController'
        })
        .when('/UK', {
            templateUrl: "UK.html",
            controller: 'CountryController'
        })
        .when('/India', {
            templateUrl: "India.html",
            controller: 'CountryController'
        })
        .otherwise({ redirectTo: '/' });
});

app.controller('CountryController', function($scope, $location){
    $scope.RedirecttoCountry = function( path ){
        $location.path(path);
    }
});

3 个答案:

答案 0 :(得分:2)

我希望您需要动态处理所有国家/地区的单一路线,因为您可以将templateUrl用作:country定义为参数的函数。

.when('/:country', {
    templateUrl: function(params){
        return (params.country || 'US')+'.html';
    },
    controller: 'CountryController'
})

答案 1 :(得分:1)

您的代码似乎运行正常。只需确保已包含所有依赖项并正确关闭所有HTML标记。

var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {
    $routeProvider.when('/', {
        templateUrl: "main.html",
        controller: 'CountryController'
    }).when('/:country', {
        templateUrl: function(params) {
            return (params.country) + '.html';
        },
        controller: 'CountryController'
    }).otherwise({
        redirectTo: '/'
    });
});
app.controller('CountryController', function($scope, $location) {
    $scope.RedirecttoCountry = function(path) {
        $location.path(path);
    }
});

使用params工作Plunker https://plnkr.co/edit/hFLCyGgo91GwQhpagvAz?p=preview

答案 2 :(得分:1)

templateUrl可以是参数的函数,例如:

$routeProvider
  .when('/:country', {
    templateUrl: function(params) {
      return params.country + '.html';
    }
  })
  .when('/', {
    template: 'default'
  })
  .otherwise({ redirectTo: '/' });

请参阅: https://plnkr.co/edit/rNQutPGZ5b4B0NK5g4Wz?p=preview