mor*_*are 23 angularjs angular-ui-router
我ui-router在我的应用程序中使用了优秀的模块.作为其中的一部分,我使用命名视图来管理我在应用程序中的"动态子导航".
考虑以下:
$urlRouterProvider.otherwise('/person/list');
$stateProvider
.state('person', {
url: '/person',
abstract: true,
})
.state('person.list', {
url: '/list',
views: {
"main@": {
templateUrl: "person.list.html",
controller: 'PersonListController'
}
}
})
.state('person.details', {
url: '/{id}',
views: {
'main@': {
templateUrl: "person.details.html",
controller: 'PersonController'
},
'nav@': {
templateUrl: "person.nav.html",
controller: 'PersonNavController'
}
}
});
Run Code Online (Sandbox Code Playgroud)
当用户首次访问该应用时,会向他们显示一个人员列表.当他们点击某个人时,他们会被带到详细信息页面.很基本的东西.这是标记,如果它有帮助......
<div>
<aside ui-view="nav"></aside>
<div ui-view="main"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
但是,PersonNavController调用REST服务来获取人员列表,因此在查看人员时,用户可以导航兄弟元素.使用上述方法会导致模板和控制器重新渲染,从而导致每次点击后出现延迟,尽管内容永远不会改变.
有没有办法保持'nav@'视图加载,只刷新'main@'视图?
Rad*_*ler 25
我ui-router在这种情况下使用的方法是:将视图移动到最小公分母.
换句话说:如果ui-view="nav"在所有细节之间共享并且对所有细节都是相同的(因为它应该只加载一次) - 它应该是list状态的一部分(状态的父detail级)
父州定义将如下调整:
.state('person.list', {
url: '/list',
views: {
"main@": {
templateUrl: "person.list.html",
controller: 'PersonListController'
}
// here we target the person.list.html
// and its ui-view="nav"
'nav@person.list': {
templateUrl: "person.nav.html",
controller: 'PersonNavController'
}
}
Run Code Online (Sandbox Code Playgroud)
那么诀窍在哪里?在角度的力量ui-router.在每个州定义期间,我们可以定位当前视图.现在,nav视图是list状态定义的一部分- 即在详细切换期间不会重新加载(也请在此处查看更多说明)
我们只需使用定义的命名约定,请参阅:
很少引用上述文件中的行:
views: {
////////////////////////////////////
// Relative Targeting //
// Targets parent state ui-view's //
////////////////////////////////////
// Relatively targets the 'detail' view in this state's parent state, 'contacts'.
// <div ui-view='detail'/> within contacts.html
"detail" : { },
// Relatively targets the unnamed view in this state's parent state, 'contacts'.
// <div ui-view/> within contacts.html
"" : { },
///////////////////////////////////////////////////////
// Absolute Targeting using '@' //
// Targets any view within this state or an ancestor //
///////////////////////////////////////////////////////
// Absolutely targets the 'info' view in this state, 'contacts.detail'.
// <div ui-view='info'/> within contacts.detail.html
"info@contacts.detail" : { }
// Absolutely targets the 'detail' view in the 'contacts' state.
// <div ui-view='detail'/> within contacts.html
"detail@contacts" : { }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9540 次 |
| 最近记录: |