我对AngularJS中的$ location服务有疑问。我点击按钮时设置了网址:
$location.path('pageNumber='+$scope.page+'&'+'pageSize='+$scope.pageSize);
现在问题是如何从URL编写变量,如何检查If exists变量,例如:pageSize
答案 0 :(得分:0)
您需要在重定向页面的控制器上使用$location.search()
。
$location.search()
返回一个对象,由键作为变量,值作为其值。所以,如果你写这样的查询字符串:
?pageNumber=5&pageSize=10
然后您可以像这样获取pageNumber
和pageSize
的值,
$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
}