更改路由参数而不更新视图

jbe*_*itz 20 routes angularjs

我目前正试图找出如何在不重新加载整个页面的情况下更改路由参数.例如,如果我开始

http://www.example.com/#/page

但将名称更新为"George",将路线更改为:

http://www.example.com/#/page/george

如果我已经有http://www.example.com/#/page/:name路由.

没有重新加载位置.可以设置$ routeParams.name ="George"吗?

编辑: 或者,有没有办法更新http://www.example.com/#/page?name=George而无需重新加载或重置页面?

jbe*_*itz 41

好的,经过大量的搜索.我回答了自己的问题.

我发现在角度文档上找到任何东西是非常不可能的,但有时,一旦找到它,它就会改变你对你的问题的思考方式.

我从这里开始:http://docs.angularjs.org/api/ng.$ location我带我到这里:http://docs.angularjs.org/guide/dev_guide.services.$ location我带到了这个问题:AngularJS使用$ location.path进行分页但没有重新加载ngView

我最终做了什么:我添加了$location.search({name: 'George'});To我想要更改名称的地方(A $ scope.$ watch).

但是,这仍将重新加载页面,除非您执行底部StackOverflow链接中的操作并将参数添加到您传入的对象中$routeProvider.when.就我而言,它看起来像:$routeProvider.when('/page', {controller: 'MyCtrl', templateUrl:'path/to/template', reloadOnSearch:false}).

我希望这能让别人头疼.

  • 此解决方案添加了查询参数,并不替换现有的routeParams,这是您的原始问题.要替换现有的routeParams,可以使用`$ location.path()`,这是一个getter和setter. (2认同)

Jas*_*ung 11

我实际上找到了一个解决方案,我发现我的应用程序更优雅.

$ locationChangeSuccess事件是一种蛮力方法,但我发现检查路径允许我们在路径路径模板未更改时避免页面重新加载,但在切换到不同的路由模板时重新加载页面:

var lastRoute = $route.current;
$scope.$on('$locationChangeSuccess', function (event) {
    if (lastRoute.$$route.originalPath === $route.current.$$route.originalPath) {
        $route.current = lastRoute;
    }
});
Run Code Online (Sandbox Code Playgroud)

将该代码添加到特定控制器使重新加载更加智能.