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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage