2016-06-15 7 views
0

リンクされたフィドルには、変数isLoggedInを更新したままにしたいという単純なアプリケーションが含まれています。 問題は、関数が1回の実行で3回呼び出されることです。anglejs ng-view with outer Controller

https://jsfiddle.net/michael_loukeris/xprmoq65/

$scope.isLoggedIn = function(){ 
    console.log('errr'); 
    //calling a service 

return false; 
}; 

私のナビゲーションバーは、ユーザ認証に基づいて更新されたままとなるよう、私の場合にはバインディング2WAYデータを達成するための最良の方法は何ですか。

+0

https://daveceddia.com/controller-function-executed-multiple-times/ –

答えて

0

角度が初期化中ng-show数回触れますので、あなたは$scope.variableng-showない$scope.function を使用する必要があります。

代わりにng-initを使用してください。あなたのケースで

<ul ng-init='checkUser()'> 
    <li><a href="#/this" ng-show="isLoggedIn">This</a></li> 
    <li><a href="#/that">That</a></li> 
    <li><a href="#/other">Other</a></li> 
    </ul> 

app.controller('MainCtrl', function ($scope) { 
$scope.checkUser = function(){ 
    $scope.isLoggedIn = false; 
    console.log('errr'); 
}; 
+0

あなたの視点は、変数の値を変更し、必要に応じて呼び出すメインコントローラ内の関数を使用することです。私はそれをして動作します。私は、その良い練習、ログインサブビュー(私は角度ルートを使用している)私は$スコープを呼び出す必要があるかどうかわからない。$ parent.checkUser();それは大丈夫だとどう思いますか? –

0

ng-controller="MainCtrl"を削除し、実行時に3回呼び出されません。 関数の代わりにtrue/falseに設定された変数を使用します。

+0

は実際にコントローラ機能ではありませんhttps://daveceddia.com/controller-function-executed-multiple-times/この記事は本当に有益です –