Javascript 更改URL而不删除Angularjs中的历史记录

Javascript 更改URL而不删除Angularjs中的历史记录,javascript,jquery,angularjs,angular-ui-router,location-href,Javascript,Jquery,Angularjs,Angular Ui Router,Location Href,我正在使用“ui.router”和“$state.go”重定向页面 我的项目的“导航栏”如下所示 <ul class="sidebar-menu"> <li class="active"> <a ui-sref="root.menu({brand_id:nav.brand_id})"> <i class="fa fa-building-o"></i> <spa

我正在使用“ui.router”和“$state.go”重定向页面

我的项目的“导航栏”如下所示

<ul class="sidebar-menu">
    <li class="active">
        <a ui-sref="root.menu({brand_id:nav.brand_id})">
            <i class="fa fa-building-o"></i>
            <span> {{nav.navInfo.menu.auth_name}}</span>
        </a>
    </li>
    <li>
        <a ui-sref="root.picture({brand_id:nav.brand_id})">
            <i class="fa fa-book"></i>
            <span> {{nav.navInfo.picture.auth_name}}</span>
        </a>
    </li>
    ...
</ul>
  • {{nav.navInfo.menu.auth_name}
  • {{nav.navInfo.picture.auth_name}
  • ...
每一页首先显示包含项目列表的表格

让我们假设一种情况

当我在“菜单”页面时,我搜索关键字

根据我的代码,URL更改包括关键字

例如,这就像

搜索前

/菜单?页面=1,偏移=0,限制=10

搜索后

/menu?page=1&offset=0&limit=10&searchKey=menu\u name&searchString=pizza

然后,我单击“导航栏”中的“菜单”选项卡再次获取整个列表

此时,我想使用触发器
UISREF
$(位置)
或其他方法更改URL

使用
$(location).attr('href',url)
时,成功更改url

但若我点击了浏览器后退按钮,浏览器历史记录并并没有保持

我还使用了
window.location.href
window.location.replace
,但结果相同

在这种情况下,如何维护历史记录

我已经准备好尝试你的各种建议了

PS

如果这还不够解释,请给我反馈

实际上,我不知道如何更具体地解释这一点(

我在“js”中试过,不是在“控制器”中

我在《js》中这样做没有什么特别的原因

只是我觉得这可能更简单

提前谢谢

更新

我可以通过单击“导航栏”上的每个选项卡来更改页面

这可以使用
ui-sref
和perfect来实现

我的主要问题是,例如,当“.active”类位于“menu”选项卡中时

再次单击“菜单”选项卡,
ui sref
不起作用

所以我用了
$location
window
或者“js”中的什么东西

在此之后,我得到的是“删除历史记录”

我想在单击“菜单”选项卡时使页面处于初始化状态

单击选项卡之前

/menu?page=1&offset=0&limit=10&searchKey=menu\u name&searchString=pizza

单击选项卡后

/菜单?页面=1,偏移=0,限制=10

还有一点,我正在手动将
?page=1&offset=0&limit=10
放入URL


所以我要做的就是触发
ui sref
在不删除历史记录的情况下更改URL。

如果您使用的是角度路由器,请不要使用
窗口。location
$(location)
更改页面url和位置。Angular router有自己的机制,即
$state

您需要首先在控制器中注入
$state
,然后才能使用:

$state.go('yourStateHere');
这将在浏览器中保留对历史记录的所有跟踪

注意:

请确保在
app.js
中定义好您的状态,我的意思是您需要在考虑所有搜索参数的情况下为serach页面定义相应的状态

有关更多详细信息,请查看:


您是否尝试过使用角度服务
$location
? 例如:

$location.path(“/main_page”);

然后您可能需要使用
$scope.$applyAsync();

更新(在下面的评论之后)

例如:

$way.step("/blog", $scope);  //add page to path
$way.step("/main", $scope);  //add page to path
$way.goBack(); // now you on /blog page

也许你对我的问题理解不够。我想,这是因为我解释得不够透彻。谢谢你的关注,请再次查看我的问题。我刚刚更新了。:)谢谢你的回答!如何应用
$scope.$applyAsync()
?我是否要在
标签中添加
ng单击
?也许您可以在路线功能中捕捉到它。但是,
ng单击
也必须起作用。(您需要检查的唯一一件事——可能需要一个布尔返回值来批准位置更改)如果您遇到了这个问题,我可以建议另外一种解决方法:尝试创建您自己的服务来控制位置。我将用这个例子更新我的答案。我看到了你更新的答案。这是手动保存历史记录的方法,不是吗?有没有比你更简单的方法?
$way.step("/blog", $scope);  //add page to path
$way.step("/main", $scope);  //add page to path
$way.goBack(); // now you on /blog page