我还在使用伟大的ui-router
处理角度应用。我想使用一些动态嵌套状态(我谈到它here),所以我知道它是可能的。
这是我的代码,具有特定的状态及其动态子状态:
.state('home', {
url: '/home',
controller: 'RouteCtrl'
})
.state('home.state', {
url: '/home/:state',
controller: 'RouteCtrl'
})
$urlRouterProvider.otherwise('/home')
我有3个按钮(更具体地说,我使用<a>
来创建它)来访问3个不同的状态:&#39; home&#39;,&#39; contact&#39;和&#39;关于&#39;。 &#39;接触&#39;和&#39;关于&#39;是&#39; home&#39;嵌套状态和每个状态都有一个特定的文本,以便在激活时显示。
不幸的是,似乎两个孩子的州都没有从“家庭”中解决。州。
Here是问题的解决者,与我的问题相符。有什么想法吗?
答案 0 :(得分:1)
这将为您提供新状态的工作电话:
$scope.redirect = function(state) {
console.log('redirect to state : ' + state);
if (state != 'home') {
$state.go('home.state', {
'state': state
});
} else {
$state.go('home');
}
}
但是,它仍然无法更改页面上的文本,因为控制器仅在最初加载时设置一次。
答案 1 :(得分:0)
这里的主要问题是你想在状态中有一个变量。您无法转到州home.about
,因为它不是给定的.state
。
您应该查看stateParams
,或者您可以使用Angular&#39; $location
指定要转到网址的网址。
注意:我认为像home.state
这样的子状态的网址不需要/home
网址,因为它位于父亲的状态。
答案 2 :(得分:0)
从技术上讲,家庭,联系和约不是3个州。您似乎正在做的是根据州的参数更改内容。这可以使用一个状态来实现,并在你使用$ state.go时强制ui-router重新加载状态。
我在这里修改了你的plunkr http://plnkr.co/edit/XXaltjG17FwY15tSbKaD?p=preview
您的州定义可能看起来像这样,
$state.go('home', {state: state}, {reload: true});
问号使州参数成为可选项,也是查询字符串。
重定向可能看起来像这样。你需要重新加载,因为你要走同一条路线
$state.go('home',{}, {reload: true, inherit: false});
重定向到主页可能看起来像这样。您需要为此重定向禁用继承,因为您不想保留查询字符串。
{{1}}