2017-01-25 4 views
1

navbarに使用するコントローラで変数をリロードします。AngularJSリロードコントローラ変数

私は各ビューのコントローラを持っています。私はログインした後にログインするためにコントローラ「loginCtrl」を使用します。「rootController」にvarセットをリロードします。

ng-ifに変数を使用して、ナビゲーションバーのボタンログインとログアウトを切り替えますが、この変数(rootController内)はファクトリ関数を呼び出すようになっています。

工場の値を変更すると、変数が1回だけ変更されるという問題があります。解決策は、rootをリセットしてvarをリセットするだけです。インターネットに検索すると、$ route.reload()が見つかりました。 私はrootControllerで関数を作成していると私はそれを使用します。

$rootScope.reload = function(){ $timeout(function() { 
              $route.reload(); 
              }, 0); 
           }; 

が、私は他のコントローラでのアプリの負荷の無限大を呼び出すとき。

解決方法

EDIT:

angular.module('appModule',[]) 
.controller('AppCtrl',function ($scope,$rootScope,UserLogged){ 
     $scope.isLogged = UserLogged.isLogged(); 
     $scope.user = UserLogged.get(); 
}); 
.config(...) // To configure route, one route have loginCtrl as controller 

.controller('loginCtrl',function($scope,$http,UserLogged){ 
    $http.get(..).sucess(function(data){UserLogged.set(data)}) 
         // call a WS to setup the factory UserLogged  
) 

.factory('UserLogged',function(){ 
var userLogged 
var isLogged 
// set and get method 
} 

すべての作業罰金が、私は工場でisLoggedのVARを更新したときにアプリがAppCtrlにscope.isLogged $更新されません。解決策は、UserLogged.get()を呼び出して$ scope.isLoggedを新しい値にリセットするためにAppCtrlをリロードすることです。

は解決:rtvalluriおかげ

// App control 
$scope.$on('loginLogout',function(){ 
    $scope.isLogged = UserLogged.isLogged(); 
    $scope.userLogged = UserLogged.get(); 
}); 

// loginCtrl 
$http.get(..).sucess(function(data){ 
            UserLogged.set(data); 
            $scope.$emit('loginLogout'); 
            }) 
+0

コードフォームloginCtrlを使用して変数を工場に設定し、 rootCtrlは工場からの変数を使用しますか? – GPicazo

+0

最終的にあなたの問題を解決するイベントを放出;)乾杯:) :) @Fabrizio – rtvalluri

答えて

1

あなたはそれが

あなたのナビゲーションバー

でリフレッシュすることなくrootControllerで変数を更新することが可能なログインおよびログアウトのための2つのイベントを、発光試すことができます@

<button ng-if="!isLoggedIn">Login</button> 
<button ng-if="isLoggedIn">Logout</button> 

mainControllerがrootContの場合ローラーとログインおよびログアウト2つの異なるコントローラに2つの異なる機能で、

その後、使用してrootControllerに聞いておいてください。ログインコントローラから「ログイン」イベント発光してみ

$scope.$on('login',function(event,data){ 
    //assume 'isLoggedIn' is the boolean value 
    $scope.isLoggedIn = data; 
}); 

$scope.$on('logout',function(event,data){ 
    $scope.isLoggedIn = data; 
}); 

//on successful login, trigger below event 
$scope.$emit('login',true); 

とログアウトコントローラで

//on successful logout, trigger below event 
$scope.$emit('logout',false); 

注:上記のアプローチmainControllerが他のコントローラの親コントローラである場合にのみ動作します。そうでない場合は、$ scopeの代わりに$ rootScopeでイベントを送出してください。

関連する問題