我的路由的routeProvider的reloadOnSearch设置为false:
$routeProvider .when( "/film/list",{ templateUrl: '/film/list.html',controller: FilmListController,reloadOnSearch: false } .... )
我这样做是因为我不想在查询字符串更改后重新加载整个控制器,但我仍然使用它,并且url看起来像这样:film / list?sort = isbn& order = asc& offset = 0。现在每当查询字符串更改,我想从我的控制器调用一个函数。所以我试图在控制器中设置一个$ watch:
$scope.location = $location; $scope.$watch( 'location.search()',function( search) { $scope.list(); });
但这不工作。如果我设置$ watch来观察查询字符串的单个参数的更改,那么它工作。但我不想为我的查询字符串的每个参数设置$ watch。我现在使用的解决方案是:
$scope.location = $location; $scope.$watch( 'location.url()',function( url ) { if($location.path() == '/film/list') $scope.list(); });
所以,不是看着搜索,我看着整个url,然后我检查路径是否是我在routeProvider中设置有条件地调用该函数。我不喜欢这个解决方案是我必须解释类型$ location.path的值匹配。
任何人可以提出一个更好的解决方案,也许解释我为什么$ watch不能为$ location.search()工作?
您可以在控制器中侦听$ routeUpdate事件:
原文链接:https://www.f2er.com/angularjs/146316.html$scope.$on('$routeUpdate',function(){ $scope.sort = $location.search().sort; $scope.order = $location.search().order; $scope.offset = $location.search().offset; });