ui-router的子状态未解析

时间:2015-07-06 14:25:55

标签: javascript angularjs angular-ui-router

我还在使用伟大的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是问题的解决者,与我的问题相符。有什么想法吗?

3 个答案:

答案 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}}