Angularjs 如何使显示后端数据的angular ui路由器状态成为可书签状态?

Angularjs 如何使显示后端数据的angular ui路由器状态成为可书签状态?,angularjs,angular-ui-router,restangular,Angularjs,Angular Ui Router,Restangular,我只和angularJS合作了几个星期,所以我可能会错过一些明显的东西 我的基本搜索+显示应用程序与Restangular和ui路由器配合使用,如下所示: 1) 用户输入查询并单击搜索 ->后端结果存储在$scope.results中,结果显示为列表, url现在是:?query=foo 2) 用户单击其中一个结果 ->单击的项目变为$scope.active_项目,路由器转到局部详细视图, url现在是:/show/1234?query=foo 现在,我找不到任何关于角度的方法,使这个生成的详

我只和angularJS合作了几个星期,所以我可能会错过一些明显的东西

我的基本搜索+显示应用程序与Restangular和ui路由器配合使用,如下所示:

1) 用户输入查询并单击搜索

->后端结果存储在$scope.results中,结果显示为列表, url现在是:?query=foo

2) 用户单击其中一个结果

->单击的项目变为$scope.active_项目,路由器转到局部详细视图, url现在是:/show/1234?query=foo

现在,我找不到任何关于角度的方法,使这个生成的详细视图url成为可书签/可链接的。当我重新加载页面$scope.results和$scope.active_项为空时,后端数据明显丢失

为了使我的搜索结果成为书签,我将其放入了init函数中:

var location = $location.search();
if (location['query']) {
  $scope.query = location['query'];
}
我曾在细节视图中考虑过类似的东西,但它似乎不是一种有角度的做事方式:

$scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){
    if (toState.name == 'show_detail' && !$scope.active_item) {
      // load single item based on the id in the url the and assign to scope
    }
}

使依赖后端数据的状态成为可书签状态的最佳做法是什么?

查询参数可在
$stateParams
服务上获得,例如
$stateParams.query

要在转到带书签的URL时获取搜索结果,请使用状态定义上的
resolve
属性(请参阅:了解“解析基础知识”的视频演练)

当涉及到书签时,这里有几个问题-搜索必须返回稳定的结果才能工作,即相同的搜索总是返回相同的结果,否则当结果更改时,显示的项目可能不存在


例如,“下周二事件”中的第3项可以添加书签,但不会给出有用的结果,但“2013年6月12日”中的第3项可能更可靠(当然这取决于搜索来源、删除等)

查看
resolve
功能,并发出http请求,以便在路由打开时获取必要的数据。难道您不能使用routerProvider从页面URL向控制器提供参数“foo”和“1234”,然后在页面刷新时再次执行查询吗?
.state('search', {
    url: '/search?query' }) .state('search.detail', {
    url: '/show/:resultId?query',
    resolve: {
        results: ['SearchService', '$stateParams', function(SearchService, $stateParams) {
            return SearchService.get($stateParams.query);
        }]
    } })