0

这是我的路线提供者:

.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它将显示空白搜索片段/ url,我的搜索查询消失了。

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

$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(带有查询),但是片段仍然重新加载,并且由于我在获得搜索响应后执行此操作,所以我的结果消失了。

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

4

1 回答 1

2

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

基本上,在你的搜索完成后,你会做这样的事情,这会将 url 更新为:...?q=foobar

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

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

当您输入您的路线时,您可以使用$location.search()提取现有值(如果它们有一个 url 书签),然后基于这些执行搜索。

更新

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

于 2013-09-01T15:56:12.807 回答