我正在使用 AngularJs 1.0.8 开发搜索应用程序。
为了允许书签和共享链接,我想在浏览器的地址栏中表示搜索的当前状态。URL 可能如下所示
http://example.com/#!/search?s= "一些查询词"&page=2
所以应用程序必须做两件事:
- 有人搜索时更新 URL
- 当另一个人打开相同的 URL 时恢复状态
我目前所做的(也许这是错误的方法)是:
配置 routeProvider 以防止浏览器在搜索参数更改时重新加载
...
$routeProvider.when('/search', {
templateUrl: 'app/search/view/List.html',
controller: 'listCtrl',
reloadOnSearch: false
});
...
当有人按下搜索按钮时获取搜索结果并设置位置(searchArray 保存搜索参数)
...
$location.search(searchArray);
...
相应地更新搜索结果。
...
$scope.search_results=data;
...
为了恢复我正在观看的状态 $location.search()
...
$scope.$watch(function () { return $location.search() }, function (newVal) {/* evaluate params and fire query */ });
...
我的问题是,那个位置总是改变两次。我已经设法通过维护脏标志来克服这个问题。
由于我认为 URL 中的这种维护状态是一种流行的场景,我认为 Angular 必须有更好的方法。谁能引导我走向正确的方向?