1

ng-showを使用してdivを表示および非表示にしようとしています。これは、いくつかのビューでのみ表示したいナビゲーションバーです。他のコントローラでng-showの値を変更する

私はそのdivを「制御する」コントローラを持っています。他のコントローラではdiv(navbar)を非表示または表示するためにこのng-showの値を編集したいと思います。

私は$rootScope、タイムアウト、$apply、工場を使用して別のものを試しましたが、何も動作しません。

誰かが私を助けることができるかどうか私はここで尋ねています。

(私の英語のため申し訳ありませんが)

これは私のhtmlとjsのコード(最後の編集コード)

<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> 
私が試し

(= NG-ショー "isLogged ==偽")あまりにも。

のdivのコントローラ:

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

私はisLogged値を編集したいコントローラー:助けを

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

ありがとう!

+0

、? –

+0

私は$範囲が異なるコントローラ間で運ばれないと思いますか?したがって、appCtrlコントローラのisLogged変数を初期化する必要がありますか? – Olly

+0

前にappCtrlで$ scope.isLogged = falseを試しました。それは初期化の意味ですか? –

答えて

0

さて、最後に私は解決策を見つけました。誰かを助けることができる場合、私はこれを置く:

を私はNG-ショーを初期化appCtrlで.RUN入れる:

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

を、今、私が他のコントローラに真の価値を置くときそれが動作し、navbarが表示されます。

uはisLogged変数を初期化している
cities2.controller('userCtrl',['$rootScope', '$scope', '$state','$http','md5','$sessionStorage', function($rootScope, $scope, $state, $http, md5, $sessionStorage) { 
    $rootScope.isLogged=true; 
    }]); 
0

サービスを使用してコントローラ間でデータを共有することをお勧めします。

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 
    } 
}); 

いずれかのコントローラで$ scope.LoggedStatus.isLoggedの値を変更すると、両方の値が変更されます。

+0

しかし、私はビューに応じてisLoggedの値を変更したい –

0

appCtrlコントローラで$ scope.isLogged = 0を実行します。この値を1に変更すると、ブロックが表示され、ブロックされていない場合は非表示になります。

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

は以下plunkerを参照してください。

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

+0

私は、それをappCtrlと$ scope.isLogged = 1のuserCtrlに入れますが、falseとtrueを入れた場合と同じ問題です。 isLoggedの値は常にfalseで、新しい値は更新されません。 –

+0

どのように値を更新しますか? –

+0

userCtrlでng-showのdivを表示するためにisLoggedに真の値を入れたい –

関連する問題