我一直在使用以下路由
contractManagementApp.config(['$routeProvider',
function ($routeProvider) {
$routeProvider.
when('/Clients', {
templateUrl: 'Partials/ClientList.html',
controller: 'ClientListCtrl'
}).
otherwise({
redirectTo: '/Fail'
});
]);
我希望能够将参数传递给该页面,即要过滤的ID 我通过在我的控制器中设置以下代码找到了:
if ($routeParams.clientId)
{
//Do stuff
}
将以下内容粘贴到浏览器中:
[linktomyhost] /客户?的clientId = 107
我得到了我想要的结果。但是,当尝试按代码重定向时:
var path='/Clients?clientId=' + $scope.clientId;
$location.path(path);
这失败了,把我带到了'其他'状态。
我可以这样做吗?我想避免在我希望传递此可选过滤器ID
时有不同的路由条件答案 0 :(得分:0)
尝试这样做:
$routeProvider.
when('/Clients', {
templateUrl: 'Partials/ClientList.html',
controller: 'ClientListCtrl'
}).
when('/Clients/:clientId', {
templateUrl: 'Partials/ClientList.html',
controller: 'ClientListCtrl'
}).
otherwise({
redirectTo: '/Fail'
});
然后你就可以传递id:
[linktomyhost]/Clients/107
如果必须使用查询参数,则可以执行以下操作:
$location.search('clientId', 107).path('/Clients');
...然后您可以像这样检索值:
var searchObject = $location.search(), // returns {clientId:107}
clientId = searchObject.clientId;
答案 1 :(得分:0)
AngularJS具有内置的搜索/过滤功能,该功能包含在$ location。
中变量$ location.search()将在您的网址后面返回任何数据,前提是您将其放在"?"之后?问号。
例如,url website.com /#/ module?v = 2
当调用$ location.search()时,将返回哈希{" v":" 2"}。
因此,您可以使用$ location.search()[" v"]在URL的末尾查找参数并将其存储为如下变量:
var search = $location.search()["v"]; //returns 2 for v=2
比在配置中简单运行if语句以确定是否运行过滤器:
sampleApp.config([' $ routeProvider&#39 ;, function($ routeProvider){
if (search == "x" )
{
var urlPost = "_filter.html";
else
urlPost = ".html";
}
等。
确保将最终的URL绑定到配置中的模板和控制器:
when('/module',
{
templateUrl: 'templates/' + urlPost,
controller: 'MainRouteCtrl'
}).