Javascript 更改URL而不删除Angularjs中的历史记录
我正在使用“ui.router”和“$state.go”重定向页面 我的项目的“导航栏”如下所示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
<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