我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'
}
}
});
用户首次访问该应用程序时,系统会向他们显示人员列表。当他们单击某个人时,他们将被带到详细信息页面。很基本的东西。如果有帮助,这是标记…
<div>
<aside ui-view="nav"></aside>
<div ui-view="main"></div>
</div>
但是,PersonNavController
调用REST服务以获取人员列表,因此在查看人员时,用户可以导航同级元素。使用上述方法会导致模板和控制器重新呈现,因此每次单击后都会产生延迟,尽管内容永远不会改变。
有没有一种方法可以保持'nav@'
视图加载并仅刷新'main@'
视图?
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'
}
}
那么诀窍在哪里?在角的力量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" : { }
我有一个组件,它显示了可以使用url查询参数过滤的项目列表,这些项目从api分页,如果设置了过滤器,我需要再次调用第一个页面,这个第一次调用是在路由器的解析器中,所以我需要的是路由器以相同的方式重新加载,就像我来自其他URL一样。 app.routes.ts app.resolver.ts app.component.ts app.service.ts 其他.ts组件
有没有可能--在中也这样做? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路由是,在保存时显示,并且要将路由(23-是新项的id存储在数据库中)
问题内容: 当前,我们的项目正在使用default ,而我正在使用此“ hack”来进行更改,而无需重新加载页面: 和在 我想到的替换用筑巢路线,但无法找到这。 有可能吗? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路线是在SAVE 之后显示的,我想将路线更改为(23-是存储在db中的新项目的id) 问题答案: 只需使用即可代替 。内部调用,但会自动将选项设置为。您可以呼叫和设置。例如
问题内容: 例如,我希望此导航更改可重新加载状态: 但我不希望此导航重新加载状态: 根据ui-router文档,设置应可完成此操作,但请尝试以下操作。当为时,即使文档说应该更改路径参数,它也不会重新加载状态。 Plunkr:http: //run.plnkr.co/ZPy9uabYlkMilwdS/#/param 问题答案: 这是UI-Router中的错误,已在0.2.15版中修复: https:
问题内容: 更新的问题 标题中的问题仍然存在-是否有可能捕获和取消视图重载。 原始问题 :我需要为应用程序添加锚点支持(主题的锚点)。 这是我的距离: 我的根本问题是,当我单击带有的链接时,状态会完全重新加载,这反过来又重新请求Topic的数据。如何仅“刷新”查询参数(并在控制器中捕获该事件)却不重新加载状态(以保持数据加载)? 编辑 对于我的问题,有一个相当简单的解决方案,但我没注意到-根据有关
我在我的应用程序中使用导航栏,每次我选择一个项目时,它都会加载一个片段。 我能够使用相同的文本字段和按钮保存片段的状态,但有一个片段可以加载地图、添加标记、集群并执行。 每次我转到另一个菜单项并返回时,它都会重新加载所有内容,例如AsyncTask、Cluster、Markers。我如何停止此片段以不再重新创建地图并在返回时保存状态: Udate 1:我更新了代码,但问题仍然存在 主要活动: 主片