我在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相同,并且不会重新加载视图。在这种情况下,有没有一种方法可以让它进行刷新?
答案 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()
并且为了防止控制器重新加载,您可以在路径中设置正确的值