使用URL AngularJS的参数

时间:2017-07-03 12:42:43

标签: angularjs node.js

我对AngularJS中的$ location服务有疑问。我点击按钮时设置了网址:

$location.path('pageNumber='+$scope.page+'&'+'pageSize='+$scope.pageSize);

现在问题是如何从URL编写变量,如何检查If exists变量,例如:pageSize

1 个答案:

答案 0 :(得分:0)

您需要在重定向页面的控制器上使用$location.search()

$location.search()返回一个对象,由键作为变量,值作为其值。所以,如果你写这样的查询字符串:

?pageNumber=5&pageSize=10

然后您可以像这样获取pageNumberpageSize的值,

$scope.pageNumber = $location.search().pageNumber;
$scope.pageSize = $location.search().pageSize

现在你可以检查这样的存在

if(angular.isDefined($scope.pageNumber)){
  //true if pageNumber exist
}

if(angular.isDefined($scope.pageSize )){
 ////true if pageSize exist
}

有人认为这里要考虑的是,这不适用于Angular中的hashbang。您将获得$location.search()的空值(对象)。此时您需要在配置中明确定义:

moduleName.config(['$locationProvider', function($locationProvider){
    $locationProvider.html5Mode(true);    
}]);

OR

如果您不想使用html5Mode,因为您需要服务器路由进行页面刷新,那么您可以使用javascript方式获取如下所示的查询字符串:

function getQueryString(name) {
    var url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

并在控制器内部,您需要像这样初始化

$scope.pageNumber = getQueryString('pageNumber');
$scope.pageSize = getQueryString('pageSize');

现在你可以检查这样的存在

if(angular.isDefined($scope.pageNumber)){
  //true if pageNumber exist
}

if(angular.isDefined($scope.pageSize )){
 ////true if pageSize exist
}