我的应用程序在选项卡之间切换时使用$state.go
,这会导致重新初始化控制器,这些控制器中的作用域变量会更新,并导致内存泄漏。有没有一种方法可以停止重新初始化控制器,但在状态更改时更改URL?
下面的示例是我应用程序中的routes.js。
.state('home',
{
abstract : true,
url : '/home',
templateUrl : 'scripts/home.html'
})
.state('home.summary',
{
url : '/summary?userId',
controller : 'SummaryCtrl',
views :
{
summary:
{
templateUrl: 'scripts/home/summary.html'
}
}
})
.state('home.summary.detail',
{
url : '/detail/:id',
controller : 'DetailCtrl',
views :
{
detail:
{
templateUrl: 'scripts/home/detail.html'
}
}
})
如果已经为唯一id加载了DetailCtrl,如何在进入home.summary.detail状态时停止重新加载DetailCtrl但更改URL?
也尝试在子状态的解析中执行$q.reject,它会停止重新加载控制器,但不会更改url。
我也尝试了reloadOnSearch=false,它会停止控制器的重新加载,但不会更改url。
发布于 2014-09-03 16:53:56
您可以使用$state.transitionTo
而不是$state.go
。$state.go
在内部调用$state.transitionTo
,但会自动将选项设置为{ location: true, inherit: true, relative: $state.$current, notify: true }
。您可以调用$state.transitionTo
并设置location: false
。例如:
$state.go('.detail', {id: newId})
可以替换为
$state.transitionTo ('.detail', {id: newId}, { location: false, inherit: true, relative: $state.$current, notify: true })
发布于 2014-04-30 02:47:47
你可以有一个包含内存泄漏代码的抽象控制器。并且当url改变时抽象控制器不会更新。
这是来自官方github资源库的文档
https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views
看一下组合部分。
在这个演示中,contacts控制器将只调用一次contacts.detail控制器将在您每次更改状态时更新,但与contacts控制器http://plnkr.co/edit/gmtcE2?p=preview共享作用域
https://stackoverflow.com/questions/23378045
复制相似问题