【发布时间】:2026-01-12 19:10:01
【问题描述】:
我有一个带有右抽屉视图的父级,每当我更改状态时都会重新加载该视图。我试图阻止它重新加载。
这是父状态
.state('main', {
url: 'main',
abstract: true,
views: {
'': {
templateUrl: 'app/main/main.tpl.html',
controller: 'mainController as vm'
},
'right-drawer@main': {
templateUrl: 'app/main/right-drawer/right-drawer.tpl.html',
controller: 'rightDrawerController as vm'
}
}
})
和一个子状态。在创建新客户时,我试图有条件地将右侧抽屉视图隐藏在 main.customer 之外。但是,当我使用 $state.go('main.dashboard'); 之类的东西切换状态时,它会重新加载右抽屉......我怎样才能防止它重新加载?
.state('main.customer', {
url: '/customer',
params: {
company: null
},
views: {
'content': {
templateUrl: 'app/modules/my-account/my-account.tpl.html',
controller: 'myAccountController as vm'
},
'right-drawer@main': {
templateProvider: function($stateParams, $templateFactory, userService) {
return $stateParams.company !== 'NEW'
? $templateFactory.fromUrl('app/main/right-drawer/right-drawer.tpl.html', $stateParams)
: null;
},
controllerProvider: function($stateParams, userService) {
var ctrlName = $stateParams.company !== 'NEW'
? 'rightDrawerController'
: '';
return ctrlName;
},
controllerAs: 'vm'
}
}
})
我尝试将 main.customer 中的视图称为 'right-drawer' 而不是 'right-drawer@main',但这不允许我使用 templateProvider 和 controllerProvider。我认为它只是使用主要状态的正确抽屉。我也试过$state.go('main.dashboard', {}, {notify: false});和$state.go('main.dashboard', {}, {reload: false});
【问题讨论】:
标签: javascript angularjs angular-ui-router