$stateProvider
.state("home", {
url: "/home",
templateUrl: "templates/home.html",
controller: "homeCtrl"
})
.state("home.abc", {
url: "/abc/:id",
templateUrl: "templates/abc.html",
controller: "abcCtrl"
})
.state("home.abc.xyz", {
url: "/xyz",
templateUrl: "templates/xyz.html",
controller: "xyzCtrl"
})
.controller('abctrl', function($scope, $state, $stateParams) {
$state.go('home.abc.xyz', {
'id': $stateParams.id
});
})
-----状态进入home.abc.xyz之后它又一次回到了家乡状态。请让我知道是谁解决了这个问题?
答案 0 :(得分:0)
尝试这样的事情。
//...
.state("home.abc.xyz", {
url: "/xyz",
templateUrl: "templates/xyz.html",
controller: "xyzCtrl",
params:{
id: null
}
})
修改强>
我花了一些时间来了解问题是什么,下面是解决方案。简单来说,ui.router
没有任何问题,但是,您的配置是错误的。让我试着解释一下。
当您请求xyz
州,ui.router
拳头加载主页模板时,它会尝试在abc
内加载home
模板,最后{{1}进入xyz
。由于您可能在模板中没有正确的HTML(正如我在下面的代码中所做的那样)abc
仅加载ui.router
模板,因为它知道放置它的位置。我希望你能在这里理解问题和解决方案。
home
<强>的index.html 强>
$stateProvider
.state("home", {
url: "/home",
templateUrl: "templates/home.html",
controller: "homeCtrl"
})
.state("home.abc", {
url: "/abc/:id",
views:{
'abc': {
templateUrl: "templates/abc.html",
controller: "abcCtrl"
}
}
})
.state("home.abc.xyz", {
url: "/xyz",
views:{
'xyz': {
templateUrl: "templates/xyz.html",
controller: "xyzCtrl"
}
}
})
.controller('abctrl', function($scope, $state, $stateParams) {
//this should not be part of any controller.
/*$state.go('home.abc.xyz', {
'id': $stateParams.id
});*/
})
<强> home.html的强>
<body>
<div ui-view></div>
<body>
<强> abc.html 强>
<div ui-view="abc"></div>
答案 1 :(得分:0)
感谢您的回复。
最后这个解决方案有效。
app.run(function($ rootScope,$ location,$ state,$ stateParams){ $ rootScope。$ on(&#34; $ stateChangeStart&#34;,function(event,toState,toParams,fromState,fromParams){
if(toState.name == "home.abc") {
$state.go('home.abc.xyz', {'id': toParams.id});
}
});
})