如何处理routeProvider,使用可以加入书签的GET api调用?

时间:2013-09-01 12:42:13

标签: angularjs

这是我的路线提供者:

.config(['$routeProvider', function($routeProvider) {
            $routeProvider.
                when('/', {templateUrl: '/partials/search.html'}).
                when('/about', {templateUrl: '/partials/about.html'}).
                when('/services', {templateUrl: '/partials/services.html'})
                //otherwise({redirectTo: '/'});
                ;

        }])

我在/partials/search.html上运行搜索。我希望搜索可以加入书签。所以我将此添加到我收到搜索的ajax响应的代码中:

$location.path(myGetQuery);

但是,这会触发routeProvider并且它不会加载任何片段并且视图保持为空。使用otherwise... redirect,它将显示空白搜索片段/网址,我的搜索查询已消失。

我也试过这样的事情......

$routeProvider.
   when('/', {templateUrl: '/partials/search.html'}).
   when('/:pars', {templateUrl: '/partials/search.html'}).
   when('/about', {templateUrl: '/partials/about.html'}).
   when('/services', {templateUrl: '/partials/services.html'});     

好吧,感谢/:pars$location.path(myGetQuery);使用正确的url(带有查询)加载页面,但片段仍然重新加载,因为我在执行后执行此操作搜索的反应,我的结果消失了。

处理此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用$location.search更改网址的查询字符串值。请参阅文档here

基本上,在您的搜索完成后,您会执行以下操作,这会将网址更新为:...?q=foobar

$location.search({ q: 'foobar' });

在您的情况下,您可能希望将传递的对象带入ajax查询并将其传递给搜索。

当您输入路线时,您可以使用$location.search()提取现有值(如果他们有书签的网址),然后根据这些值执行搜索。

<强>更新

根据评论,您还需要更新路线以包含reloadOnSearch: false