2017-02-07 4 views
0

I mit einer Base App ui Router Zustand haben eine App ändern ...Wie aus Nachladen resolve ui-Router zu stoppen, wenn params

$stateProvider.state('app', { 
    navigationTitleKey : 'app', 
    abstract: true, 
    url: '/?{param}', 
    views: obj 
}); 

Und dann ein child und grand-child Zustand ...

$stateProvider.state('app.wizardchild', { 
    parent: 'app', 
    url: '/wizard', 
    resolve: { 
    wizard: ['wizard',function(wizard) { 
     return new wizard(); 
    }], 
    }, 

$stateProvider.state('app.wizardgrandchild', { 
     parent: 'app.wizardchild' 
    } 

Als ich tun ...

$state.go('app.wizardgrandchild') von app.wizardchild

Es funktioniert wie erwartet und der Assistent wurde nur einmal aufgelöst.

Aber wenn ich $state.go('app.wizardgrandchild', {param:'blah'}) tun von app.wizardchild

Es wieder läuft die Entschlossenheit Block was bedeutet, dass auf dem grand-child Zustand eine neue Kopie des Assistenten hat. Aber ich möchte nicht, dass das passiert. Ich möchte, dass es dasselbe ist und keine weitere Kopie erstellt wird. Gibt es eine Möglichkeit, dieses Verhalten zu deaktivieren?

Antwort

0

Versuchen Sie, wizard als Service (nicht ab Werk) zu registrieren. Da alle Angular Services Singletons sind, sollten Sie Ihr Problem lösen. Nun jedes Mal neue Instanz von Assistenten erstellen new verwenden - wenn Sie Service nutzen Angular wird automatisch eine Instanz erstellen und injizieren es jedes Mal, es ist erforderlich (jedes Mal die gleiche Instanz injiziert werden)

0

Ihre param auf dem app erklärt Zustand. Wenn sich ein Zustandsparameter ändert, wird er mit dem neuen Parameterwert neu geladen. Wenn ein Status neu geladen wird, werden alle seine Kinder neu geladen.

Wenn Sie die Parameterdeklaration in den Enkelstatus versetzen können, sollte das das Problem lösen.

Alternativ können Sie param im App-Status und mark it as dynamic beibehalten. Dynamische Parameter führen nicht zum Neuladen des Status.

$stateProvider.state('app', { 
    navigationTitleKey : 'app', 
    abstract: true, 
    url: '/?{param}', 
    params: { param: { dynamic: true } }, 
    views: obj 
}); 

Wenn Sie ui-Router Legacy verwenden (0.x), there is reloadOnSearch, die ähnlich ist, kann aber fehlerhaft sein.

$stateProvider.state('app', { 
    navigationTitleKey : 'app', 
    abstract: true, 
    url: '/?{param}', 
    reloadOnSearch: false, 
    views: obj 
});