如何在angularjs中通过查询参数重定向url
How to redirect url by query parameters in angularjs?
我在angularjs
中使用ngRoute
来委托不同的html模板,例如:
phonecatApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/phones', {
templateUrl: 'partials/phone-list.html',
controller: 'PhoneListCtrl'
}).
when('/cars', {
templateUrl: 'partials/car-detail.html',
controller: 'CarDetailCtrl'
});
//many more routes
}]);
问题:我想有一个共同的url,如localhost/my-app?myparam=Nokia
。
我想将myparam
与映射表进行比较。如果参数名是一个电话公司,我想委托给/phones
。如果是汽车公司,我想委托/cars
等等。你懂的。
我还必须重写url如下:localhost/myapp/phones?myparam=Nokia
。因此,ngRoute将自动捕获正确的模板和控制器。
问题:如何拦截初始加载,并根据url参数重定向?
旁注:我不能重写routeProvider配置,例如使用不同的插件,如angular-ui-router
。
听起来你可能想后退一步,重新考虑为什么你试图以这种方式解决它,但考虑到你的约束,你最好的选择可能是有一个返回正确URL的服务,并从控制器调用它:
phonecatApp.controller("trafficCtrl", function ($routeParams,trafficService,$location) {
if ($routeParams.myparam) {
var destination = trafficService.getDestination($routeParams.myparam);
$location.path(destination);
}
})
.service("trafficService", function () {
this.getDestination = function (paramValue) {
switch(paramValue) {
case "Nokia":
return "/phones";
case "Ford":
return "some/car/url";
// etc...
}
}
});
同样,你必须添加以下(通用)路由到提供者:
$routeProvider.when("/", {
template: '',
controller: 'trafficController'
});
我不知道这是否是正确的解决方案。但是你可以创建一个新的路由/myapp
..写一个控制器和重定向使用$location
服务。在使用$location.query()
找到查询参数值并相应地重定向后
如果我们使它成为一个REST调用,如/my-app/Nokia或my-app/Samsung而不是查询参数,我认为我们可以在配置本身动态路由它。
phonecatApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/my-app/:myparam', {
templateUrl: function(params){
return TemplateMappingFunction(params.myparam) +'.html'
},
controller: function(params){
return ControllerMappingFunction(params.myparam)
}
})
//many more routes
}]);
例如,- 如果URL是/my-app/Nokia, TemplateMappingFunction(Nokia)将返回partials/phone-list.html',如果URL是/my-app/Nokia, TemplateMappingFunction(Nokia)将返回partials/phone-list.html',如果URL是/my-app/BMW, TemplateMappingFunction(BMW)将返回partials/car-details.html',
查询参数方法
phonecatApp.config(['$routeProvider',
function($routeProvider) {
/* Function to retrieve Query parameters*/
function getParameterByName(name) {
name = name.replace(/['[]/, "''[").replace(/[']]/, "'']");
var regex = new RegExp("[''?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/'+/g, " "));
}
$routeProvider.
when('/my-app', {
templateUrl: TemplateMappingFunction(getParameterByName('myparam'))
},
controller: ControllerMappingFunction(getParameterByName('myparam'))
}
})
//many more routes
}]);
所以,如果URL是localhost/my-app?myparam=Nokia,那么TemplateMappingFunction('Nokia')将返回'partials/phone-list.html'
相关文章:
- 如何将参数赋予作为查询参数的参数值给定的函数
- 具有可选'/'s和查询参数
- 如果没有Ember中的控制器,我如何更改查询参数
- 如何编码&在不是't是查询参数的一部分
- 如何在JavaScript中传递查询参数和重定向
- React 路由器和任意查询参数:页面在加载时无意中刷新
- MongoDB查找查询参数
- 布尔查询参数被 Sails.js 视为字符串
- jQuery脚本,它搜索现有的查询参数并且不添加“"如果存在
- 基于查询参数的可选承诺步骤
- 如何使用Backbone.Return捕获查询参数的更改
- 在iron router中使用查询参数修改模板
- 如何将查询参数设置为我的所有路线,当它改变时-在恩伯
- 如何使用查询参数在jQuery中生成url
- Javascript/jQuery URL查询参数解析
- Ember.js查询参数不尊重replace:true并使用replaceState
- jQuery将查询参数附加到当前哈希中,忽略重复项
- window.location.href未设置查询参数
- 如何在angular中访问URL中的查询参数(在hash之外,非html 5模式)
- 获取具有主干木偶查询参数的当前 URL