2016-04-18 14 views
0

hideQAの値を切り替えるコードスニペットは以下のとおりです。値は両方の条件で正しく変更されていますが、ng-if、via関数呼び出しでスコープを変更できないのはなぜですか?AngularJS

`<button ng-click="hideQA = !hideQA">Reset</button>` 

をしかし、私は同じように、メソッドから値を変更していた場合、それは正常に動作している - - 私がやっている場合

`<button ng-click="resetForm()">Reset</button>` 

誰もがこの背後にある理由を説明できますか?

ワーキングPlnkrは - http://plnkr.co/edit/rIAAcibX2Ts1VaMWKQtc?p=preview

+0

準備を進め20分の価値が非常に良い記事です。以前同様のトグルを作成しました:https://jsfiddle.net/oa4b75zj/ – Rob

答えて

0

ng-ifが持つ独自の$scope

はplunkrを参照してください。要素が削除されると、 $scopeも削除されます。だから、別のオプションは、すでにこの問題を解決する上で与えられた ng-show

<div class="message" ng-show="hideQA !== false"> 
    This is div two !!! 
    <button ng-click="hideQA = !hideQA">Reset</button> 
</div> 
+0

$ parentのドット表記isnteadを使う方が良いです。 – Walfrat

1

これは、スコープ間inhertanceの限界です。

ドットの表記法を使用する必要があります。 http://plnkr.co/edit/ES9qTl7nsmGGOJnE0H8u?p=preview

ここ

は、ドット表記を使用してコードのように何を見ている、ドット表記の詳細な説明のための

参照記事:

<button ng-click="a.hideQA = !a.hideQA">Reset</button> 
$scope.a = {hideQA:false}; 
$scope.a.hideQA = true; 
1

回答を使用することです$parent

<button ng-click="$parent.hideQA = !hideQA">Reset</button> 

使用して親スコープに参照する必要があります。ここに私の働くplunkrリンクがあります:http://plnkr.co/edit/ZdL441bBmQToGZn4gfQt?p=preview。そして、私は何かを言うよ:

あなたがng-ifを使用する場合、それはangularjs公式ドキュメントから、独自のスコープを作成します:ngIf内で作成

範囲はprototypal inheritanceを使用して、その親スコープから継承します。

要するに

そこから値を参照し、親スコープの場合、値のみが(stringintegerboolean等のような)主要タイプにコピーされなく値の基準(又はpointer)。つまり、双方向ではなく片方向の参照です。したがって、双方向として使用するには、常にjavascript object {attr: value}を使用することをお勧めします。そのため、.をお勧めします。ここで

は、私はそれがあなたの比較に関係していると思わスコープについて、これはあなたを助けることができるhttps://github.com/angular/angular.js/wiki/Understanding-Scopes

希望:)

関連する問題