我正在使用'ui.router'和'$ state.go'重定向页面,
我项目的'navbar'看起来像这样。
<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>
每个页面显示表格,首先具有项目列表。
让我们假定的情况。
当我在"菜单"页面中时,我搜索一个关键字。
按照我的代码,URL更改包括关键字。
例如,这就像
一样搜索之前:
/menu?page=1&offset=0&limit=10
搜索后:
/menu?page=1&offset=0&limit=10&searchKey=menu_name&searchString=pizza
。
。
然后,我单击" navbar"中的"菜单"选项卡以再次获取整个列表。
此时,我想使用触发ui-sref
或$(location)
或其他东西更改URL。
使用$(location).attr('href', url)
时,成功更改URL
但是,如果我单击"浏览器"返回按钮,则浏览器历史记录无法维护。
,而且我也使用了window.location.href
,window.location.replace
,但结果相同。
在这种情况下如何维护历史?
我已经准备好尝试所有建议!
。
。
PS 。
如果这是不够的解释,请给我反馈。
实际上,我不知道如何更具体地解释这一点。:(
我已经在" JS"中尝试了一下,而不是"控制器"。
没有特殊原因我在" JS"中做到了。
我认为这可能更简单。
预先感谢!
。
。
update
我可以通过单击" navbar"上的每个选项卡来更改页面。
这使用ui-sref
和Perfect。
我的主要问题是,例如,当'.Active'类都在'菜单'选项卡中时,
再次单击"菜单"选项卡,ui-sref
不起作用。
所以我使用了 $location
, window
或'js'中的东西,
之后,我得到的是'删除历史记录'。
当我单击"菜单"选项卡时,我想在初始化状态中制作页面。
单击选项卡:
/menu?page=1&offset=0&limit=10&searchKey=menu_name&searchString=pizza
单击选项卡:
/menu?page=1&offset=0&limit=10
又是,我将?page=1&offset=0&limit=10
手动放入URL,
所以我要做的就是触发ui-sref
或更改URL而不删除历史记录。
好吧,如果您使用的是角路由器,请勿使用window.location
或$(location)
更改页面URL和位置。Angular Router具有自己这样做的机制,即$state
。
您需要首先在控制器中注入$state
,然后可以使用:
$state.go('yourStateHere');
这将使所有跟踪浏览器中的历史记录保持。
注意:
请确保您的状态在app.js
中定义得很好,我的意思是您需要定义serach页面的各自状态,以使所有搜索参数consivertaion。
有关更多详细信息,您可以检查:
- ui-router快速参考。
- StateProvider参考。
- 使用UI-Router 教程的AngularJS路由。
您是否尝试使用Angular Service $location
?例如:
$location.path("/main_page");
然后您可能需要使用$scope.$applyAsync();
update (在下面的评论之后)
services.service("$way", ["$location", function ($location) {
var self = this;
var lastBack; //last page where you was
this.way = new Array();
var LIMIT_LENGTH = 30; //limit of route history
var curScope = null; //current scope
var active = true; //is service active
this.step = function (path, $scope) {
curScope = $scope;
if (lastBack != path) {
lastBack = null;
this.way.push(path);
if (this.way.length > LIMIT_LENGTH) {
this.way.shift();
}
}
}
this.goBack = function () {
if (active) {
var path = back();
lastBack = path;
if (path != "/") {
$location.path(path);
curScope.$applyAsync();
}
}
}
this.setActive = function (_active) {
active = _active;
}
this.refresh = function () {
this.way = new Array();
}
function back() {
if (self.way.length > 1) {
self.way.pop();
Log.o("WAY_BACK", self.way);
return self.way[self.way.length - 1];
}
}
}]);
示例:
$way.step("/blog", $scope); //add page to path
$way.step("/main", $scope); //add page to path
$way.goBack(); // now you on /blog page