2017-12-25 35 views
0

である。それは基本的に正しい取り組んでいるBoolean trueのが、コントローラ偽angularJS親スコープ(外部1ラップ全体のWebアプリケーション)私はブール変数を定義するには

$localForage.getItem('authorization') 
    .then(function(authData) { 
      if(authData) { 
       $scope.authentication.isAuth = true; 
       //token is added in http interceptor 
      } else { 
       $scope.authentication.isAuth = false; 
      } 
     }, function(){ 
      console.log("error with getting authorization localForage after refresh"); 
     } 
    ); 

。今私はng-if="$parent.authentication.isAuth"でこのブール値に基づいてUIを構築することができます。私はまた、<p>{{$parent.authentication.isAuth}}</p>のようにtrue/falseを表示することができ、正しいことも示しています。

1つのコントローラでは、このブール値を表示していないコントローラ内で使用します。だから私はif($scope.authentication.isAuth){またはif($scope.$parent.authentication.isAuth){(私は両方を試してみました)と私はこの条件を使用しているコントローラのビュー内で<p>{{$parent.authentication.isAuth}}</p>が表示されても、この条件は他に行きます。

だから

<div ng-controller="ctrl"> 
    <p>{{$parent.authentication.isAuth}}</p> 
</div> 

段落の表示をしてctrlという名前のコントローラ内でこの条件if($scope.authentication.isAuth){は...他にはなぜ、このような奇妙な行動を行きますか?

if($scope.authentication.isAuth){ 
    console.log($scope.authentication.isAuth); 
    console.log('true'); 
} else { 
    console.log($scope.authentication.isAuth); 
    console.log('false'); 
} 

そして、console.log falseと "false"の文字列。

+0

実際にどのコードがel内にあるのかセ? OK。私は編集する。 – BT101

+0

両方の条件の中で同じ値を表示していますが、それはelse部分にどうやって行くのですか? – Sajeetharan

+0

それは真ではない偽のコンソールだから – BT101

答えて

1

あなたが値非同期($localForage.getItem('authorization').then ...)をしたように、それは非同期操作が完了した後にあなたのビューがそれに応じて値を更新し、それがtrueに設定されることがあり、false初めてとなる - 。毎回それは変わる - あなたはそれを示して言う理由ですtrueが表示されていますが、最初にfalseになり、数ミリ秒後にtrueに変わりますが、それでも必然的に表示されますが、それでも起こるのですが、console.logは非同期の変更が発生する前に実行され、if > else一度実行すると、変数の状態は、trueに設定される前に記録されます。

+0

このscenerio $では、ブール値を変更してもアプリのパフォーマンスが低下することはありませんか? – BT101

関連する問題