2017-07-03 67 views
0

我在与AngularJS $位置服务的关系问题。我设置的网址,当我点击一个按钮:PARAMS与URL AngularJS

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

现在的问题是我怎么能写从URL变量,我怎么可以检查是否存在例如变量:pageSize的

+0

如果你绑使分页采用了棱角分明检查该 【如何做AngularJS传呼?](https://stackoverflow.com/questions/ 10816073 /如何到DO寻呼功能于angularjs) –

+0

你设置你的$ locationProvider.html5Mode(真); –

回答

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 
} 

一想到这里要考虑的是,这不会与角hashbang工作。您将获得$location.search()的空值(对象)。这时,你需要在你的配置明确定义此:

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

OR

如果你不想因为你需要刷新页面服务器的路由,那么你可以使用JavaScript的方式来使用html5Mode得到的查询字符串象下面这样:

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 
} 
+0

是否设置了您的$ locationProvider.html5Mode(true); –

+0

我纠正: product.config([ '$ locationProvider',函数($ locationProvider){ \t $ locationProvider.html5Mode({启用 :真实, requireBase:假 });} ]); 现在我有问题,为什么当我点击导航链接URL会改变,但网站不改变,只有刷新后? – Turqus

+0

你需要这样当页面被刷新该服务器路由访问定义路由在你的服务器上的所有网页,并返回角的母版页,你有NG-视图(或UI视图)的路径 –