AngularJS:使用相同的搜索URL重新加载视图

时间:2014-09-01 09:42:34

标签: angularjs

我在AngularJS中编写了一个搜索屏幕,该搜索屏幕在同一页面中提取并显示搜索结果。我希望URL能够反映搜索中使用的参数。我到目前为止(简化):

<input type="text" ng-model="search.name">
<button ng-click="search()">Search</button>

<ul>
  <li ng-repeat="widget in widgets">...</li>
</ul>

控制器(Coffeescript):

module.controller "WidgetController", ($scope, $http, $routeParams, $location) ->  
  if $routeParams.name
    $scope.search.name = $routeParams.name
    config = 
      params:
        name: $routeParams.name
    $http.get("/api/widgets", config).success (data) ->
      $scope.widgets = data

  $scope.search = ->
    $location.path("widgets").search(name: $scope.search.name)

这很好用 - 当我点击&#34;搜索&#34;时,会更新网址以反映查询,并返回结果。

唯一的问题是,如果我进行搜索,然后使用相同的查询再次单击“搜索”按钮,则不会刷新结果。据推测,$location服务看到当前URL已经与请求的URL相同,并且不会重新加载视图。在这种情况下,有没有一种方法可以让它进行刷新?

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是你依赖于控制器刷新,我会做的是把这个位作为方法

doSearch = ->
  if $routeParams.name
    $scope.search.name = $routeParams.name
    config = 
      params:
        name: $routeParams.name
    $http.get("/api/widgets", config).success (data) ->
      $scope.widgets = data

然后你可以从搜索方法

运行搜索
$scope.search = ->
    $location.path("widgets").search(name: $scope.search.name)
    doSearch()

并且为了防止控制器重新加载,您可以在路径中设置正确的值