当reloadOnSearch为false时,$location.search上的AngularJs $watch不工作

前端之家收集整理的这篇文章主要介绍了当reloadOnSearch为false时,$location.search上的AngularJs $watch不工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的路由的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;
});
原文链接:https://www.f2er.com/angularjs/146316.html

猜你在找的Angularjs相关文章