問題タブ [angularjs-ng-repeat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 配列の更新時にAngularJSがngRepeatを更新しない
AngularJSを理解するのに深刻な問題を抱えていることがあります。だから私は私のコントローラーに次のような基本的な配列を持っています
テンプレートで、items配列ng-repeat = "iteminitems"をngRepeatingしています。これまでのところ超ストレートフォワード。いくつかのUXアクションの後、いくつかの新しいものをアレイにプッシュしたいと思います。
したがって、50%の確率で、新しい要素がビューに追加されます。しかし、残りの50%は、何も起こりません。そして、それは非常に苛立たしいようなものです。bcそれを$scope。$apply()でラップすると、「$digestはすでに進行中です」というエラーが発生しました。それを$timeoutにラップしても役に立ちません。
また、Chrome拡張機能を使用して要素スコープを検査すると、新しいデータがあり、$scope.itemsの値が正しいことがわかります。しかし、ビューはそれをDOMに追加することを処理していません。
ありがとう!
angularjs - ng-repeat で不明なキーを取得する
ハッシュの配列に対して ng-repeat を実行しようとすると、キーがインデックスになるようです。では、このようなオブジェクトのキーを取得するにはどうすればよいでしょうか?
コースで ng-repeat="(key, course) を実行すると"
キーはインデックス 0 と 1 だけです。
「3000:501:001」とキーが参照するオブジェクトを取得する必要があります。キー名がわかりません。
angularjs - ng-repeat 内にあるカスタム ディレクティブ内の AngularJS ng-options
カスタム ディレクティブ内に配置されている選択要素の値を設定および取得する方法を見つけるのを手伝ってくれませんか。
これは私が持っているものです:
カテゴリとステータスの 2 つの配列があります。各カテゴリには、独自のステータスがあります。カテゴリのステータスが選択されたら、selectedStatus に保存して、最終的に のようなものにする必要があります[{CategoryId:1,StatusId:2},{CategoryId:2,StatusId:3}]
。selectedStatus が既に初期化されている場合、対応するカテゴリの選択されたステータスを確認したい場合は、値を読み取るだけでなく、値も入力する必要があることを意味します。
ありがとうございました。
デモ:フィドル
angularjs - ng-repeatからフィルターが更新されると、AngularJSでフィルター処理された結果が更新されない
AngularJSng-repeat
を使用して、ユーザーのリストをフィルタリングしています。結果の人のリストは変数に渡されますfiltered
。表示したいfiltered.length
。
フィルタは正しく機能し、フィルタを調整すると適切な人が表示されますが、人の数(つまりfiltered.length
)が更新されない場合があります。
それはかなり奇妙に思えます:
ただしfiltered.length
、ページの下部にを表示すると、の後にはng-repeat
機能するようです。一番上に置くと、80%の時間しか機能しません。
angularjs - AngularJSのng-repeatスコープを使用したディレクティブ分離スコープ
分離スコープを使用したディレクティブがあり(他の場所でディレクティブを再利用できるようにするため)、このディレクティブを。で使用するとng-repeat
、機能しません。
このトピックに関するすべてのドキュメントとStackOverflowの回答を読み、問題を理解しました。私はいつもの落とし穴をすべて避けたと思います。
ng-repeat
したがって、ディレクティブによって作成されたスコープが原因でコードが失敗することを理解しています。私自身のディレクティブは、分離スコープを作成し、親スコープ内のオブジェクトへの双方向のデータバインディングを実行します。私のディレクティブは、このバインドされた変数に新しいオブジェクト値を割り当てます。これは、私のディレクティブが使用されていない場合ng-repeat
(親変数が正しく更新されている場合)に完全に機能します。ただし、を使用するng-repeat
と、割り当てによってng-repeat
スコープ内に新しい変数が作成され、親変数は変更を認識しません。これはすべて、私が読んだ内容に基づいて予想どおりです。
また、特定の要素に複数のディレクティブがある場合、1つのスコープのみが作成されることも読みました。またpriority
、各ディレクティブにaを設定して、ディレクティブが適用される順序を定義できます。ディレクティブは優先度で並べ替えられ、コンパイル関数が呼び出されます( http://docs.angularjs.org/guide/directiveでpriorityという単語を検索してください)。
そのため、優先度を使用して、ディレクティブが最初に実行され、最終的に分離スコープが作成されるようにしたいと考えていましたng-repeat
。実行すると、親スコープからプロトタイプを継承するスコープを作成する代わりに、分離スコープを再利用します。ng-repeat
ドキュメントには、そのディレクティブは優先度レベルで実行されると記載されています1000
。1
優先度が高いのか低いのかは明確ではありません。ディレクティブで優先度を使用した場合1
、違いはなかったので、試してみ2000
ました。しかし、それは事態をさらに悪化させます。私の双方向バインディングはになりundefined
、私のディレクティブは何も表示しません。
私は自分の問題を示すためにフィドルを作成しました。priority
ディレクティブの設定をコメントアウトしました。名前オブジェクトのリストと、名前オブジェクトの名前フィールドと名前フィールドを表示するというディレクティブがありname-row
ます。selected
表示されている名前をクリックすると、メインスコープに変数を設定してほしい。名前の配列である変数は、双方向のデータバインディングを使用selected
してディレクティブに渡されます。name-row
メインスコープの関数を呼び出すことでこれを機能させる方法を知っています。selected
また、別のオブジェクトの内側にあり、外側のオブジェクトにバインドすると、動作することもわかっています。しかし、私は現時点ではそれらの解決策には興味がありません。
代わりに、私が持っている質問は次のとおりです。
ng-repeat
親スコープからプロトタイプ的に継承するスコープを作成せず、代わりにディレクティブの分離スコープを使用させるにはどうすればよいですか?2000
ディレクティブの優先度が機能しないのはなぜですか?- Batarangを使用して、どのタイプのスコープが使用されているかを知ることは可能ですか?
javascript - ng-repeat検証条件でのAngular.jsの複数の入力
1つのことを除いて、すべて正常に機能しました。私はする必要myForm
があり$valid = true
ます
- すべての入力が満たされている
- 入力が入力されていません
そして$valid = false
もし
- すべてではありませんが、一部の入力が満たされています
これはすべて ng-repeat および ng-form サブフォーム内にあることに注意してください。
どうすればいいですか?何か方法はありますか?
angularjs - 単一のディレクティブと各タブのカスタム ラベル フィールドを使用して、AngularJS でオブジェクト駆動型のタブを作成する方法は?
AngularJS ホームページの例では、タブ用とペイン用の 2 つのディレクティブを使用してタブを作成しています。次のように、単一のテンプレートと単一のディレクティブを作成することは可能ですか?
HTML:
JS:
(私の質問を説明するこのフィドルを参照してください: http://jsfiddle.net/2GXs5/3/ )
私がこれまでに理解したことからng-repeat
、それは独自のディレクティブであるため、オフになり、独自のことを行いobject
、スコープ内のプロパティにアクセスできません。たとえば、ディレクティブのリンク関数でこれを行いたい場合:scope.label = scope.object['scope.labelprop']
また、私はまだ補間、トランスクルージョンなどに頭を悩ませようとしているので、解決策にはそれが含まれる可能性があります。
angularjs - AngularJSでは、ソート後に配列要素の新しいインデックスを取得する方法は?
このスニペットは私の問題をうまく示しています:
重要な部分:
ご覧のとおり、配列を再ソートしても、インデックスは常に 0 から 6 に移動するため、ハイライトは項目と共に移動しません。
ハイライトを元のアイテムに固定するにはどうすればよいですか?