当前位置: 首页 > 面试题库 >

reloadOnSearch为false时,$ location.search上的AngularJs $ watch无法正常工作

乐正远
2023-03-14
问题内容

routeProvider 路由具有 reloadOnSearch 设置为

 $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;
});


 类似资料:
  • 问题内容: 我一直在使用谷歌搜索/搜索:解决这个问题已有一段时间了,许多人似乎都在分享这个问题,但是我没有找到成功解决我问题的方法。 使用MVC3和Razor。 母版页包含: AjaxTest.cshtml包含: AjaxTester操作方法: 我总是将“失败”返回到空白页,而不是目标div中。 编辑:还请注意,如果删除if(Request.IsAjaxRequest()),我仍然不会将任何内容返

  • 问题内容: 我可能在这里丢失了一些东西,但无法使此JSONP请求正常工作,这是代码: 该请求会触发,并且我收到以下格式的响应(带有标头Content-Type:application / json): 你看到什么错了吗?也许我应该从服务器返回的格式不对吗?Angular触发错误回调,除了我设置的错误消息外,没有任何错误消息(“错误”)。 问题答案: JSONP要求您将数据包装到JavaScript

  • 问题内容: 我刚刚开始从w3schools学习AngularJS 。我正在尝试练习教程中所提到的示例。一切正常,但是当我来到“ AngularJS Controllers”时,它在w3schools中无法正常运行,请尝试一下。我已将代码分叉到这个小提琴示例中。我的脚本如下所示: 尝试帮助我,并向我推荐一个很好的教程(或任何免费的pdf文件)。 问题答案: 这是你 纠正的小提琴 。 对于angula

  • 我是新来安格拉斯的。我试图通过$http post将一些数据发布到服务器。我的代码可以到达服务器,但数据无法传递。我使用golang作为后端。我在这里犯了什么错误? go代码: 输出:

  • 问题内容: 我正在使用codeigniter 3.1。我想使用ajax发布上传数据。 Ajax上传文件不起作用。但是,当我发布不带ajax的简单表单时,它工作正常。 我不知道为什么,但控制台没有错误。 的HTML JAVASCRIPT 控制器 问题答案: 问题之一是文件上传使用的机制与其他表单类型不同。这就是为什么没有为您完成工作的原因。其他答案建议使用javascript,而这个答案也可以。 的

  • 问题内容: 正如Android文档所说:“请注意,Android测试API支持JUnit 3代码样式,但不支持JUnit4。” (测试基础知识)。应该清楚的是,Android无法立即使用JUnit 4。 但是为什么会这样呢?是因为测试是在DVM中执行的(因为Android Runtime仅支持JUnit 3)?在JVM上,自己可以选择应使用的JUnit运行时。在DVM中这是不可能的吗? 问题答案: