私はAngularJSが初めてなので、私の問題を簡単に解決できるかもしれません。私はこのフォームに取り組んでいます。入力は2つあります。1つはドアの数用で、もう1つは窓の数用です。次に、特定の数の合計のドアと窓を満たしているかどうかを表示したいいくつかのdivがあります。入力に数値を入力すると、ng-showは「true」に解決されます。しかし、要素にはまだ「ng-hide」のクラスがあり、非表示のままです。
これが私のコードのサンプルです:
<body ng-app>
Doors: <input type="number" ng-model="doors"><br>
Windows: <input type="number" ng-model="windows"><br>
<div ng-show="{{(doors + windows) < 6}}">
Shows if you have 0-5 doors and windows combined.
</div>
<div ng-show="{{(doors + windows) > 5 && (doors + windows) < 11}}">
Shows if you have 6-10 doors and windows combined.
</div>
<div ng-show="{{(doors + windows) > 10 }}">
Shows if you have more than 10 doors and windows combined.
</div>
</body>
3つのドアと4つの窓を入力したときの出力は次のとおりです。
<div ng-show="false" class="ng-hide">
Shows if you have 0-5 doors and windows combined.
</div>
<div ng-show="true" class="ng-hide">
Shows if you have 6-10 doors and windows combined.
</div>
<div ng-show="false" class="ng-hide">
Shows if you have more than 10 doors and windows combined.
</div>
ngShow
はAngular式を使用するため、二重中括弧は必要ありません。
これはあなたのために働くでしょう:
_<div ng-show="(doors + windows) < 6">
Shows if you have 0-5 doors and windows combined.
</div>
<div ng-show="(doors + windows) > 5 && (doors + windows) < 11">
Shows if you have 6-10 doors and windows combined.
</div>
<div ng-show="(doors + windows) > 10">
Shows if you have more than 10 doors and windows combined.
</div>
_
なぜ ngShow
ソースコード を見てみましょう:
_var ngShowDirective = ['$animate', function($animate) {
return function(scope, element, attr) {
scope.$watch(attr.ngShow, function ngShowWatchAction(value){
$animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide');
});
};
}];
_
重要なのは、_attr.ngShow
_を監視することです。その属性を{{(doors + windows) < 6}}
に設定すると、最初に発生するのは二重中括弧内の式が評価されることです。あなたの場合、ドアと窓はundefined
で始まるため、式はfalse
に評価されます。次に、false
が属性に渡されます。そのため、false
に_$watch
_が配置され、すべての_$digest
_サイクルfalse
がチェックされ、false
はfalse
のままです。ウォッチ機能は実行されません。
重要なことは、属性自体は監視されていないが、最初に渡された値が監視されることです。したがって、後で属性を「true」に変更し、htmlでその変更を確認しても、それはウォッチによって認識されません。
代わりに、_(doors + windows) < 6
_を_attr.ngShow
_として渡すと、各_$digest
_で_$watch
_がその式を評価します。そして、式の結果が変わるたびに、監視関数が呼び出され、適切なクラスが設定されます。