UI路由器从孩子访问父状态

fod*_*ma1 2 javascript angularjs angular-ui-router

我想根据我的 angular 应用程序中的状态设置标题。它工作得很好,但如果没有在子状态上定义标题,我想回到父级的标题属性。

这是我到目前为止:

在我的应用程序运行块中:

...
$rootScope.$on('$stateChangeSuccess', function (event, current, previous) {

  if (current.hasOwnProperty('title')) {
    $rootScope.title = current.title;
  }
});
...
Run Code Online (Sandbox Code Playgroud)

在我的模块路线中

.state('main.parent', {
  url: '/parent',
  controller: 'ParentController',
  controllerAs: 'vm',
  templateUrl: 'app/parent.html',
  title: 'Parent',
})
.state('main.parent.child', {
  url: '/child',
  controller: 'ChildController',
  controllerAs: 'vm',
  templateUrl: 'app/child.html'
})
Run Code Online (Sandbox Code Playgroud)

在代码检查期间,我发现它$stateChangeSuccess按预期触发了两次,首先是父级,然后是子级。我试图current.parent在孩子被调用时访问,但它没有这样的属性。有什么方法可以访问它吗?

更新

我看到这些问题: 获取父状态从UI路由器$ stateChangeStart从母公司获得国家UI路由器$ stateChangeStart 但他们都没有一个明确的答案,这个问题(除了在后者的状态分裂技巧,但我宁愿避免这种情况)。

Har*_*ust 5

这两种方式都有点小技巧。不要忘记在您的控制器中导入 $state(和 $stateParams 用于第二个变体)提供程序。您可以使用:

$state.$current.parent.self.title 
Run Code Online (Sandbox Code Playgroud)

或者

var tree = current.name.split('.');
tree.splice(tree.length-1, 1);
var parent = tree.join('.');
$state.get(parent, $stateParams);
Run Code Online (Sandbox Code Playgroud)