Angularjs 角度-UI路由器-嵌套状态-浏览器后退按钮未按预期工作
我有一个场景,其中我有以下嵌套状态结构:Angularjs 角度-UI路由器-嵌套状态-浏览器后退按钮未按预期工作,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我有一个场景,其中我有以下嵌套状态结构: root root.item1 root.item2 root状态有一个模板,显示在子状态中设置的一些变量。它还需要首先运行,因为它具有确定将加载哪个子状态的逻辑 如果root确定需要加载root.item2,则事件流为: exec root -> redirect to root.item2 -> exec root.item2 现在,如果我们重定向到root.item1,然后他们按Browser Back按钮,我希望重定向到r
root
root.item1
root.item2
root
状态有一个模板,显示在子状态中设置的一些变量。它还需要首先运行,因为它具有确定将加载哪个子状态的逻辑
如果root
确定需要加载root.item2
,则事件流为:
exec root -> redirect to root.item2 -> exec root.item2
现在,如果我们重定向到root.item1
,然后他们按Browser Back按钮,我希望重定向到root.item2
,但看起来url刚刚被清除,您根本看不到加载的任何子状态
下面是一个说明问题的例子
在Plunker中重现问题的步骤:
root.item2
转到详细信息1
root.item1
root.item2
显示问题的代码:
angular
.module('historyApp'[
“ui.router”
])
.config(['$stateProvider','$urlRouterProvider',
函数($stateProvider,$urlRouterProvider){
$stateProvider
.state('根'{
url:“/”,
模板:'Parent{{vm.title}}',
控制器:函数($scope,$state){
$scope.vm={title:'};
//确定将加载哪个子状态的某些条件登录:
var variableChildState='root.detail2';
$state.go(variableChildState);
}
})
.state('root.detail1'{
url:“/detail1”,
模板:“详图1至详图2”,
控制器:函数($scope,$state){
$scope.vm.title='Set in 1';
}
})
.state('root.detail2'{
url:“/detail2”,
模板:“详图2至详图1”,
控制器:函数($scope,$state){
$scope.vm.title='Set in 2';
}
})
$urlRouterProvider。否则('/');
}
])
.run(函数($rootScope,$location){
$rootScope.$on(“$stateChangeStart”,
函数(事件、toState、TopArms){
console.log(toState)
});
})
;代码>
我认为这是一个简单的语法解决方案:
.state('root.detail1', {
url: 'detail1',
template: '<h1>Detail 1</h1><a ui-sref="root.detail2">Go to Detail 2</a>',
controller: function($scope, $state){
$scope.vm.title = 'Set in 1';
}
})
.state('root.detail1'{
url:'detail1',
模板:“详图1至详图2”,
控制器:函数($scope,$state){
$scope.vm.title='Set in 1';
}
})
注意:url:'detail1'而不是url:'/detail1'
希望能有所帮助。它的触发$stateChangeStart
事件在my endYou right上,它确实触发了它。它只是不会重定向回您所在的子状态。我更新了当页面加载时,根状态的控制器只加载一次。如果添加console.log($state)
加载此控制器时,您可以看到它记录一次,然后转到state1,在浏览器中回击不会导致它再次记录状态,因为控制器没有重新加载。@gonkan是的,我不需要每次都执行根目录下的控制器。装载过程中只需一次。这似乎和预期的一样。我用“重现问题的步骤”更新了问题。@gonkan认为您是用户。忘记代码吧。您看到的是,您位于第页root.item2
。单击“转到根目录.item1
”。你到了那里。你点击后退按钮。您希望在root.item2
上,因为您最初在那里,但现在不在那里。