Angular Ui 路由器:停止 $state.go 以重新加载控制器但更改 URL

svu*_*ala 5 angularjs angular-ui-router

我的应用程序$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'
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

如何停止重新加载 DetailCtrl 但在状态 home.summary.detail 时更改 URL,如果 DetailCtrl 已经为唯一 id 加载了???

还尝试使用 $q.reject 来解析子状态,它会停止重新加载控制器但不会更改 url。

还尝试过 reloadOnSearch=false 它会停止重新加载控制器但不会更改 url。

Eri*_*hen 0

您可以拥有一个包含内存泄漏代码的抽象控制器。当 url 改变时,抽象控制器不会更新。

这是来自官方 github 存储库的文档

https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views

看组合部分。

这是 plnkr,联系人控制器在此演示中只会调用一次。每次更改状态时,详细信息控制器都会更新,但与联系人控制器共享范围 http://plnkr.co/edit/gmtcE2?p=preview