1

如果我正确理解这篇文章,当加载的第一个状态是绝对引用命名 ui-view 的状态时,我应该能够使用 ui-router-extras 的 deepstate-redirects 在默认 ui-view 中加载默认模板.

考虑以下示例:

angular
.module( 'app', [ 'ui.router', 'ct.ui.router.extras' ])

.config( function ( $stateProvider ) {
  $stateProvider

  .state( 'global', {
    template: '<div ui-view class="global"><em>empty global state</em></div>',
    deepStateRedirect: {
      default: { state: 'global.parent.child' }
    }
  })

  .state( 'global.parent', {
    template: '<div ui-view class="parent"><em>empty parent state</em></div>',
    sticky: true
  })

  .state( 'global.parent.child', {
    template: 'child view'
  })

  .state( 'global.dialog', {
    views: {
      'dialog@': { template: 'dialog view' }
    }
  });
})

.directive( 'body', function ( $state ) {
  return {
    link: function () {
      // this complies with global's DSR and goes straight to child-state:
      // $state.go( 'global' );

      // shouldn't this comply to global's DSR and show child-state as inactive state?
      $state.go( 'global.dialog' );
    }
  };
});

(plunkr:http ://plnkr.co/edit/fuFUFaqUGRjCKfajaWw2?p=preview )

上述是否可行,我是否遗漏了什么,或者我在这里做了一些错误假设?

我的推理*

* 部分基于我从前面提到的帖子中了解到的

dialog状态被加载时,它的父状态 ( global) 也被加载。global有一个深度状态重定向到一个状态 ( child),它填充了一个不被 ui-view 使用的 ui-view,dialog因此,child它的模板在默认的 ui-view 中呈现 - 或者这可能有点好得令人难以置信。

4

0 回答 0