2016-08-09 45 views
2

Mein Problem ist, dass ich eine schnelle Validierungsprüfung durchführen muss, wenn der Controller meiner Seite ausgeführt wird, um zu überprüfen, ob die Abfrageparameter gültig sind. So jetzt ich dies tun:

if (invalid params) { 
    $state.go('state', {param: validParam}, {reload: true}); 
} 

// Controller logic here to initialise the page 

Das Verhalten hier, dass ich erwarte, ist, dass, wenn der Parameter ungültig ist, der gesamte Controller-Reloads mit dem gültigen Parameter und alles in Ordnung ist. Was tatsächlich passiert, ist, dass selbst nach dieser $state.go Zeile der Rest des Controllers noch versucht zu laufen.

Die einzige Art, wie ich es geschafft haben, dies zu beheben, ist der Controller-Logik in eine wie else Aussage zu tun, bewegen so:

if (invalid params) { 
    $state.go('state', {param: validParam}, {reload: true}); 
} else { 
    // Controller logic here to initialise the page 
} 

Dies funktioniert, aber ich finde es nicht ideal viel zu bewegen komplizierte Logik in diese else Aussage, und ich würde erwarten, dass der Controller an der $state.go stoppen und den Controller neu laden ... daher, warum ich reload: true benutze.

Also irgendwelche Ideen, warum dies nicht wie erwartet geschieht?

Antwort

2

Nun, state.go ist ein Funktionsaufruf, der ausgeführt wird, aber nicht die Weiterverarbeitung zu stoppen. Im Fall sind wir in einer Funktion, wir Steuerflussrechnung haben die Ausführung zu stoppen, wie return:

if (invalid params) { 
    $state.go(‘state’, {param: validParam}, {reload: true}); 
    return; 
} 

Und wenn wir nicht in Funktion sind ... ist es klar, JS Reihe von Operationen .. wir nur sollten sie in einer solchen Funktion kapseln:

var myFunction = function(){ 
    ... 
    if (invalid params) { 
     $state.go(‘state’, {param: validParam}, {reload: true}); 
     return; 
    } 
} 
myFunction(); 
+1

true true, werde ich den Controller in eine Funktion wickeln und zurück zu Ihnen – germainelol

+0

Danke für die Antwort bekommen, es hat funktioniert. Ich denke, das ist einer der Gründe, warum ich manchmal kein Fan von Angular bin. Ich dachte, es wäre ein Angular oder UI-Router-Problem, obwohl es in Wirklichkeit nur ein einfaches JavaScript-Problem ist./facepalm – germainelol

+0

Großartig wenn das ein bisschen geholfen hat;) –

0

Haben Sie versucht, so etwas wie:

$state.go($state.current, {param: validParam}, {reload: true});