です
ng-if="show == 4 && $rootScope.detailsList1.length > 0"
これは、これらの条件文の両方に該当する場合を除き、ブラウザはdiv要素をレンダリングしないように原因となります。
ng-if
、ng-show
、ng-hide
についてのちょっとした情報があります。
ng-if
は、真であればDOMにラップされたhtmlのみを追加します。 falseの場合は、htmlを完全に削除します。つまり、ng-if
がfalseの場合、このブロック内のどの要素にもアクセスすることはできません。
ng-show/ng-hide
は、DOMに表示されるhtmlを作成しますが、要素を非表示にする場合は、ng-hide
をクラスとして追加します。これにより、要素が表示されなくてもJavaScriptでアクセスできます。
上記の質問の誤解だったng-if
、ng-show
、およびng-hide
を扱うときには役立つかもしれないと、私はそれを残します。
プランナーで遊んだ後、私はそれを働かせることができましたが、あなたは間違いなくあなたの変数をきれいにするべきだと思います。 $rootScope.detailsList1
を使用して配列内の項目数を追跡するのではなく、$ scope.details.lengthを使用するだけです。これは、よりクリーンで、読みやすく、将来的には維持しやすくなります。また、バグか意図的なのかどうかは分かりませんが、3つの異なるリストがあります。同じように見えるものはすべて$rootScope.detailsList1
、$scope.details
、および$rootScope.detailsList
です。プランナーのスニペットから、これらの3つすべてが同じ配列を参照する必要があり、rootScope上にあるものはないと仮定します。コントローラ間で渡す必要がある場合は、サービスを使用する方が良いでしょう。ちょうどインターバル関数の最後に、ここで
$interval(function() {
if ($scope.show === 4) {
if ($rootScope.detailsList <= $rootScope.detailsList1-1) {
++$rootScope.detailsList;
} else {
$rootScope.detailsList = 0;
$scope.show = 1;
}
}
else if ($scope.show < 4) {
++$scope.show;
} else {
$scope.show = 1;
}
// if the details list is empty and show is 4, skip back to 1
if ($rootScope.detailsList === 0 && $scope.show === 4) {
$scope.show = 1;
}
}, 5000, 0);
良い情報を、このチェックを追加し、しかし、私が代わりにHTMLで直接複雑なロジックに対してお勧めと思い、あなたの現在のコードベースを修正するために、と言った
それをコントローラ内の別のメソッドに抽出します。 –
@タイラー - いいえ動作しません。最新のコードhttp://plnkr.co/edit/RbcDfgsankQxETI4Z9ym?p=previewを見つけてください。私は各ショー= 1またはショー= 2またはショー= 3またはショー= 4について処理する必要がある$間隔でいくつかのthigだと思う私は間隔$インターバル(関数(){..}をアプリで指定しました。 jg。これは、ng-if = "show == 4 && $ rootScope"を追加したときの理由です。detailsList1.length> 0 "これは空白のページを5秒間表示しています – user8727958
@Tyler - +1ですが、デモプランナーで実装された場合、期待どおりに機能しません。更新されたpnlkr http://plnkr.co/edit/ sKZuQesNWKji02Xrv02C?p =提案されたコードでプレビューすると、$ scope.detailsの長さがゼロでなくても失敗し、div 4が表示されません。div4では、リストの各アイテムをスライドとして表示しますデモのhttp://plnkr.co/edit/GiivaMe6PrGn3STG1EdD?p=previewを参照してください。すべての入力? – user8727958