AngularJS UI-路由器父状态重载
AngularJS UI-Router parent state reloaded
我正在尝试创建某种 收件箱应用程序 ,左侧是邮件列表,右侧是所选邮件的详细信息,使用 UI -路由器来做这个。
我有一个 父状态 从数据库解析消息列表,还有一个 子状态 从数据库解析所选消息(参数中的 id)。
问题是:在消息之间导航时(子状态,只需改变 id 参数),父状态也会重新加载(视图、控制器...和消息列表)。我不想要它,我不明白为什么会这样。
导航 - 尝试的第一个解决方案(父级已重新加载)
<a ui-sref="app.messengers.show({id: row.id})"></a>
导航 - 尝试了第二个解决方案(已重新加载父项)
// Solution 2.1
$state.go('app.messengers.show', {id: id});
// Solution 2.2
$state.transitionTo('app.messengers.show', {id: id});
还尝试在两个解决方案中添加参数 "reload: false"(ui-sref-opts 用于第一个解决方案,在第三个参数中用于第二个):parent reloaded.
UI-路由器
.state('app.messengers', { // parent state
abstract: true,
url: '/messenger',
templateUrl: 'app/messengers/list.html',
controller: 'MessengersController',
resolve: {
load: ['$ocLazyLoad', function ($ocLazyLoad) {
return $ocLazyLoad.load([
'app/messengers/messengerService.js',
'app/messengers/messengersController.js'
]);
}],
messages: ['load', 'MessengerService', function (load, MessengerService) {
return MessengerService.list();
}]
}
})
.state('app.messengers.show', { // child state
url: '/:id',
templateUrl: 'app/messengers/detail.html',
controller: 'MessengerDetailController',
params: {
id: null
},
resolve: {
load1: ['$ocLazyLoad', function ($ocLazyLoad) {
return $ocLazyLoad.load([
'app/messengers/messengerDetailController.js'
]);
}],
message: ['load', '$stateParams', 'MessengerService', function (load, $stateParams, MessengerService) {
var regexp = new RegExp('^\d+$');
return (regexp.test($stateParams.id)) ? MessengerService.get($stateParams.id) : null;
}]
}
})
试试这个:
$state.go('^. show', {id: id});
^
表示母国。
天哪...
我忘记了我正在 $stateChangeStart(身份验证目的)中进行一些检查...如果一切正常:
$state.go(next.name, params, {reload: true});
我已将重新加载参数更改为 next.name。
有效。
抱歉错过了...
我正在尝试创建某种 收件箱应用程序 ,左侧是邮件列表,右侧是所选邮件的详细信息,使用 UI -路由器来做这个。
我有一个 父状态 从数据库解析消息列表,还有一个 子状态 从数据库解析所选消息(参数中的 id)。
问题是:在消息之间导航时(子状态,只需改变 id 参数),父状态也会重新加载(视图、控制器...和消息列表)。我不想要它,我不明白为什么会这样。
导航 - 尝试的第一个解决方案(父级已重新加载)
<a ui-sref="app.messengers.show({id: row.id})"></a>
导航 - 尝试了第二个解决方案(已重新加载父项)
// Solution 2.1
$state.go('app.messengers.show', {id: id});
// Solution 2.2
$state.transitionTo('app.messengers.show', {id: id});
还尝试在两个解决方案中添加参数 "reload: false"(ui-sref-opts 用于第一个解决方案,在第三个参数中用于第二个):parent reloaded.
UI-路由器
.state('app.messengers', { // parent state
abstract: true,
url: '/messenger',
templateUrl: 'app/messengers/list.html',
controller: 'MessengersController',
resolve: {
load: ['$ocLazyLoad', function ($ocLazyLoad) {
return $ocLazyLoad.load([
'app/messengers/messengerService.js',
'app/messengers/messengersController.js'
]);
}],
messages: ['load', 'MessengerService', function (load, MessengerService) {
return MessengerService.list();
}]
}
})
.state('app.messengers.show', { // child state
url: '/:id',
templateUrl: 'app/messengers/detail.html',
controller: 'MessengerDetailController',
params: {
id: null
},
resolve: {
load1: ['$ocLazyLoad', function ($ocLazyLoad) {
return $ocLazyLoad.load([
'app/messengers/messengerDetailController.js'
]);
}],
message: ['load', '$stateParams', 'MessengerService', function (load, $stateParams, MessengerService) {
var regexp = new RegExp('^\d+$');
return (regexp.test($stateParams.id)) ? MessengerService.get($stateParams.id) : null;
}]
}
})
试试这个:
$state.go('^. show', {id: id});
^
表示母国。
天哪...
我忘记了我正在 $stateChangeStart(身份验证目的)中进行一些检查...如果一切正常:
$state.go(next.name, params, {reload: true});
我已将重新加载参数更改为 next.name。 有效。
抱歉错过了...