Angular - 如何在更改搜索时避免添加历史记录?

guy*_*abi 3 angularjs

我在页面上有一个属性,我想反映在特定页面中的URL.

我已经设置reloadOnSearch:false了该页面.

当页面加载时,它会读取local storage并保存该属性,它会将其值添加到搜索中.但是,这会添加一条历史记录,所以我点击后back会得到没有搜索参数的网址.

我需要避免双背压.

这是我制作的一个片段(我会尝试让它在plunkr上运行)

我的HTML文件(snippet.html)

<html ng-app="snippet">
    <head>
        <script src="bower_components/angular/angular.js"></script>
        <script src="bower_components/angular-route/angular-route.js"></script>
        <script src="snippet.js"></script>

    </head>
    <body ng-view="">

    </body>

</html>
Run Code Online (Sandbox Code Playgroud)

我的JavaScript文件(snippet.js)

angular.module('snippet',['ngRoute']).config(function( $routeProvider ){
    $routeProvider.when('/so', {
        'template' : 'this is my template',
        'controller' : 'SnippetCtrl',
        'reloadOnSearch':false
    }).when('/first', {
        'template' : '<a href="snippet.html#/so">go here</a>'
    })
        .otherwise({
        redirectTo : '/first'
        // redirectTo: '/public/session/login'
    });
});


angular.module('snippet').controller('SnippetCtrl', function($location, $scope){

    $scope.name = 'guy';

    $location.search('hello','world')

});
Run Code Online (Sandbox Code Playgroud)
  • 转到snippet.html
  • 位置应该改为 #/first
  • 点击链接
  • 位置应该更改为#/so然后立即#/so?hello=world
  • 点击返回
  • 位置变更#/so- 我想避免这种情况

guy*_*abi 6

经过3天的试错,我发布这个问题10分钟后,我找到了答案......

而不是使用$ location.search(...)我应该做$ location.search(...).replace()


在3.5年后找到了我自己的q/a .. #gottaLoveStackoverflow ..似乎在更高版本的角度我不得不拆分调用.

 $location.search(...)
 $location.replace()
Run Code Online (Sandbox Code Playgroud)

链接它们会产生错误.
并根据角度文件记录

如果调用,当前$摘要期间对$ location的所有更改都将替换当前的历史记录,而不是添加新的历史记录.

所以要小心使用.