导航到子状态也会刷新其父状态
Navigating to a child state refreshes its parent state too
我将尝试提供一个示例伪代码,以便能够尽可能详细地解释我的问题。我不能在这里放一个工作代码,因为那里涉及太多的层、指令和模板。
我的基本结构是:
...
<div>
<div ui-view>
<div ui-view></div>
</div>
</div>
...
当父级ui-view
中的代码执行$state.go
以更新子级ui-view
时,父级也将再次加载。
假设父状态称为contact
,子状态为details
。我的$state.go
调用是$state.go("contact.details")
,$stateProvider
配置如下所示:
$stateProvider.state({ name: "contact" /*, rest of properties */ });
$stateProvider.state({ name: "contact.details", /*, rest of properties */ });
此外,整个子ui-view
发生在指令交叉中。假设它是:
<div>
<div ui-view>
<directive>
<content>
<div ui-view></div>
</content>
</directive>
</div>
</div>
根据这些详细信息,您是否发现任何问题?为什么$state.go("contact.details")
也重新加载contact
?(注意,contact.details
已加载,但重新加载contact
会产生副作用,因为控制器会再次执行…)
更新
如果我在contact
的控制器上调用$state.go("details")
,也会发生同样的问题,但一旦加载,当我将$state.go
调用到其他子状态时,每个子状态都会按预期打开,但父状态的控制器会再次调用。
我没有这个问题,但我和你有一个不同,我的父状态要么是抽象的,要么重定向到他的控制器中的默认子状态。
所以我会有
$stateProvider.state({ name: "contact" /*, rest of properties */
controller:['$state', function($state){
if($state.current.name=='contact'){
$state.go('contact.main');
}
}]
});
$stateProvider.state({ name: "contact.main", /*, rest of properties */
$stateProvider.state({ name: "contact.details", /*, rest of properties */ });
最后,我发现了如何解决我的问题/场景。
-
我已经切换到使用dot语法作为第一个参数来注册子状态。例如CCD_ 17而不是CCD_。我知道我的问题说我在使用
name: "a.b"
注册各州。自从我发表这篇Q&A. -
我现在调用子状态的
controller
中的$state.go("a.b")
来打开默认的子状态(这是问题的根源)。请参阅Angular JS ui路由器如何从父级重定向到子级状态?和
- AngularJS-状态更改时停止自动刷新页面
- 制作一个按钮倒计时计时器,该计时器将在5分钟后永久禁用,即使在页面刷新时也应保持禁用状态
- Selectbox选项在页面刷新jsp后保持选中状态
- 在浏览器刷新时保存XHR渲染状态
- 导航到子状态也会刷新其父状态
- 页面刷新后,所选选项卡处于非活动状态
- 维护手动页面刷新时通过AJAX加载的状态/内容
- Angular 1:最后一个复选框没有'刷新页面后不要保持选中状态
- Angular UI路由器无法识别页面刷新时的状态
- AngularJs:UI路由器浏览器刷新,移动到第一个子状态
- 如何在React.js中维护页面刷新后的状态
- 如何在使用 Firebase 登录或注销时更改状态而不刷新
- 刷新子组件更改时的应用状态
- 显示 ui 路由器模式而不刷新父状态
- 刷新窗口后,下拉列表未保持选中状态
- 如何在页面刷新之前保持悬停状态为非悬停状态
- HTML5历史API弹出状态重新加载野生动物园刷新页面无休止
- 自动刷新后保存 Web 的状态
- 请记住在刷新后使用 jQuery 切换状态
- 记住状态刷新- jQuery与cookie