Angular Digest-Zyklus wird ausgeführt, aber der ng-bind-Wert wird nicht aktualisiert
Ich habe eine übergeordnete Ansicht, die eine Navigationsleiste enthält, und innerhalb dieser Ansicht habe ich ein<div ui-view>
Element, das die untergeordnete Ansicht darstellt, auf der ich mich befinde.
Ich möchte die Navigationsleiste in der übergeordneten Ansicht basierend auf der Route der untergeordneten Ansicht bedingt ein- / ausblenden. Im Moment habe ich das:
<nav ng-show="!vm.hideNavbar">
Das erste Mal, wenn meine App geladen wird,vm.hideNavbar
ist auf true gesetzt und funktioniert wie erwartet.
Nachvm.hideNavbar
wird in false geändert, der gebundene Wert wird nicht aktualisiert. Es ist immer nochtrue
.
Jeder Controller in meiner App erweitert dieseBaseController
:
export class BaseController {
public hideNavbar: boolean;
constructor(public $scope: IBaseScope, private $state: ng.ui.IStateService) {
if ($state.current.url === '/login') {
this.hideNavbar = true;
} else {
this.hideNavbar = false;
}
$scope.vm = this;
}
}
So ruft jedes Mal, wenn ein neuer Controller geladen wird, der Konstruktor für @ aBaseController
und setzt @ bedin$scope.vm.hideNavbar
. Wenn ich sofort renne$scope.$apply()
Am Ende dieses Konstruktors treten Angular Throws-Fehler auf, die darauf hinweisen, dass der Digest-Zyklus bereits ausgeführt wird.
So, der Digest-Zyklus wird ausgeführt, aber der Wert wird meiner Ansicht nach nicht aktualisiert. Mein einziger Gedanke ist, dass ich mehr als eine Kopie des @ instanziiert habBaseController
Seit meinem ersten Controller und dem Controller, zu dem ich navigiert habe, erweitern beide diesen Controller. Also, jetzt ist mein gebundener Wert vonvm.hideNavbar
schaut immer noch auf den alten Controller.
Bin ich damit auf dem richtigen Weg? Wie kann ich dieses Problem lösen?