当reloadOnSearch为false时,$location.search上的AngularJs $wat
发布时间:2020-12-17 08:56:42 所属栏目:安全 来源:网络整理
导读:我的路由的routeProvider的reloadOnSearch设置为false: $routeProvider .when( "/film/list",{ templateUrl: '/film/list.html',controller: FilmListController,reloadOnSearch: false } .... ) 我这样做是因为我不想在查询字符串更改后重新加载整个控制器
我的路由的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事件:
$scope.$on('$routeUpdate',function(){ $scope.sort = $location.search().sort; $scope.order = $location.search().order; $scope.offset = $location.search().offset; }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |