1

Ich versuche, ein div mit ng-show anzuzeigen und zu verbergen. Es ist eine Navigationsleiste, die ich nur in einigen Ansichten anzeigen möchte.Ändern ng-Show Wert in anderen Controller

Ich habe einen Controller, der "div" steuert. Und in anderen Controller möchte ich diesen ng-show Wert bearbeiten, um das Div (Navbar) zu verstecken oder zu zeigen.

Ich versuchte verschiedene Dinge wie mit einem $rootScope, ein Timeout, ein $apply, eine Fabrik ... aber nichts funktioniert.

Also frage ich hier, ob mir jemand helfen könnte.

(Sorry für mein Englisch)

Das ist mein html und js Codes (zuletzt Code)

<div id="main"> 
    <!-- Aquí inyectamos las vistas --> 
     <div ng-controller="appCtrl" ng-show="isLogged" class="navbar navbar-fixed-top"> 
      <div class="container"> 
       <div class="navbar-header"> 
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> 
        <a class="navbar-brand" href="#/">Aula Virtual</a> </div> 
       <div class="navbar-collapse collapse"> 
        <ul class="nav navbar-nav" style="text-align: right"> 
         <li class="active"><a href="#/home">Home</a></li> 
         <li><a href="#/server">Users</a></li> 
         <li><a href="#/operaciones">Operaciones</a></li> 
         <li><a href="#/about">About</a></li> 
         <li><a href="#/contact">Contact</a></li> 
        </ul> 
       </div> 
      </div> 
      <div class="connect"> 
       <div class="container"> 
        <p> 
         Aula Virtual para profesorado y alumnos de la universidad 
        </p> 
       </div> 
      </div> 
     </div> 
    <div ui-view></div> 
    </div> 

Ich habe versucht, eine (ng-show = "isLogged == false") auch.

Die Steuerung des div:

.controller('appCtrl', function($scope, $rootScope) { 
     console.log($scope.isLogged); //---> this shows undefined 
    }); 

Der Controller, wo ich den isLogged Wert bearbeiten möchten:

cities2.controller('userCtrl',['rootScope', '$scope', '$state','$http','md5', function($rootScope, $scope, $state, $http, md5) { 
    $rootScope.$apply(function(){ 
     $rootScope.isLogged = true; 
    }); 

Danke für die Hilfe!

+0

wo u die isLogged variable Initialisierung? –

+0

Ich glaube, der $ scope wird nicht über verschiedene Controller übertragen? Also müssen Sie die isLogged-Variable im appCtrl-Controller initialisieren? – Olly

+0

Ich habe versucht, ein $ scope.isLogged = false in der appCtrl vorher, das ist was du meinst als initialisieren? –

Antwort

0

Nun, schließlich fand ich die Lösung. Ich habe dies, wenn jemand helfen kann:

ich eine .run im appCtrl setzen, wo ich die ng-Show initialisieren:

.run(function ($rootScope) { 
     $rootScope.isLogged = false; 
    }); 

und jetzt, wenn ich einen wahren Wert in der anderen Steuerung setzen es funktioniert, und die Navigationsleiste erscheint.

cities2.controller('userCtrl',['$rootScope', '$scope', '$state','$http','md5','$sessionStorage', function($rootScope, $scope, $state, $http, md5, $sessionStorage) { 
    $rootScope.isLogged=true; 
    }]); 
0

Es empfiehlt sich, Dienste zu verwenden, um Daten zwischen Controllern auszutauschen.

cities2.controller('appCtrl', ['$scope', 'LoggedStatus', function($scope,LoggedStatus) { 
    $scope.LoggedStatus = LoggedStatus; 
}]); 

cities2.controller('userCtrl', ['$scope', 'LoggedStatus', function($scope,LoggedStatus) { 
    $scope.LoggedStatus = LoggedStatus; 
}]); 

cities2.service('LoggedStatus', function() { 
    return { 
    isLogged: false 
    } 
}); 

den Wert von $ scope.LoggedStatus.isLogged in entweder Controller ändern, wird der Wert in beiden ändern.

+0

aber ich möchte den Wert von isLogged abhängig von der Ansicht ändern, wo ich bin –

0

Geben Sie in Ihrem appCtrl-Controller $ scope.isLogged = 0 ein. Wenn Sie diesen Wert in 1 ändern, wird der Block sichtbar, andernfalls wird er ausgeblendet.

app.controller('appCtrl', function($scope) { 
    $scope.isLogged=0; 
}) 

unten an den Plunker Siehe:

https://plnkr.co/edit/d3q3QwA9k5f6ewXbqZ3M?p=preview

+0

I ' Ich habe das in der appCtrl und $ scope.isLogged = 1 in der userCtrl, aber es ist das gleiche Problem, als wenn ich falsch und wahr. Es ist so, als wäre der Wert von isLogged immer falsch, aktualisiert den neuen Wert nicht. –

+0

Wie möchten Sie den Wert aktualisieren? –

+0

in der userCtrl Ich möchte einen wahren Wert in isLogged setzen, um das div der ng-show anzuzeigen –