AngularJS - 带$ location的$ routeParams

时间:2014-06-26 15:28:19

标签: angularjs

我一直在使用以下路由

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

时有不同的路由条件

2 个答案:

答案 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'
}).