您可以使用ui-router-extras 粘性状态来解决您的问题。链接有一个简单的模态示例。您应该创建两个命名视图,一个用于主要内容(背景),一个用于模式。
<div ui-view="app"></div>
<div ui-view="modal"></div>
标记状态,从您想要访问的模式sticky: true
到路由定义中的模式。
.state('main', {
abstract: true,
url: '/',
templateUrl: '_layout.html'
})
.state('main.index', {
url: '',
sticky: true,
views: {
'app': {
templateUrl: 'index.html'
}
}
})
.state('main.login', {
url: 'login/',
views: {
'modal': {
templateUrl: 'login.html'
}
}
})
还要为 stateChangeSuccess 添加一个事件:
$rootScope.$on('$stateChangeSuccess', function (ev, to, toParams, from, fromParams) {
if ((from.views && !from.views.modal) || !from.views) {
$rootScope.from = from;
$rootScope.fromParams = fromParams;
}
});
所以,当你需要关闭模式时,你可以
$state.go($rootScope.from, $rootScope.fromParams);
该解决方案存在小问题。如果您在模态状态下重新加载页面,则应用程序ui-view
将为空。