如果我正确理解这篇文章,当加载的第一个状态是绝对引用命名 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 中呈现 - 或者这可能有点好得令人难以置信。