以下是我的应用程序结构的子集以及模态结构。应用结构:
.state ('A',{
abstract: true,
sticky:true,
views:{
'@ ':{
template:'<div ui-view="container-a"></div> <div ui-view="container-b"></div>', controller: BController
}
}
})
// A 的一个子节点,它在同一个配置文件中定义为点符号 (.)
.state(A.a,{
views:{
'container-a':{templateUrl:'some.html'},
'container-b':{templateUrl:'anothertemplte.html'}
}
});
在我的第二个配置文件中,我有类似的状态配置,但这里的状态 B 是状态 Aa 的子状态,它由父属性定义,因为我不想让长字符串表示继承层次结构(AaB 等等,因为我有类似嵌套的一系列状态)
.state ('B',{
abstract: true,
parent: 'A.a',
views:{
'@':
{
template: <div ui-view="abc"></div><div ui-view="xyz"> /div>,
controller:BController
}
}
})
.state(B.b,{
views:{
'abc':{templateUrl:'some.html'},
'xyz':{templateUrl:'anothertemplte.html'}
}
});
模态结构:我有一个抽象的全局模态,它有一个关闭按钮和一个用于其他模板的 ui-sref 托管,如下所示:
$stateProvider
.state('global-modal',{
url: '',
abstract: true,
onEnter: ['$modal', function($modal) {
$modal.open({
template: '<html for close button> <div ui-sref="childModal" ',
controller: 'GlobalController',
backdrop:'static',
keyboard:false
})
}]
})
.controller('GlobalController', ['$scope', '$state', '$previousState', '$modalInstance',
function ($scope, $state, $previousState, $modalInstance) {
$previousState.memo("modalInvoker");
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
$previousState.go("modalInvoker");
};
}]);
然后有一个 2 个嵌套状态,它们在全局模态的 ui-view=childModal 中加载如下(简而言之)
state( 'C',{
parent: global-mdoal,
views:{'childModal':{template:'C_template.html', controller: 'CController' } }
})
state('D',{
parent: C,
views:{'childModal':{template:'D_template.html', controller: 'DController' } }
现在的问题:
如果我处于 Bb 状态并打开模态,它将加载 C 并且通过关闭它,粘性工作正常,但是如果再次从 Bb 打开模态并且这次从 C 导航到背景后面的子状态 D 它将导航到我的父状态 (Aa) 关闭模式的人会将我导航到 Bb,但它会刷新页面。(如果我在 Aa 顶部从 C 到 D 进行此导航,这是我的顶级状态,它不会刷新页面,因为从 C 到 D 的导航总是在背景后面加载 Aa,因此在模态中进行转换时没有刷新在顶级状态 Aa 之上,但在 Bb 等 Aa 的子状态之上的模态内部转换将导致引用和粘性不起作用