親スコープが指定されたすべての子スコープのリストを取得する方法を知りたいです。スコープのプロパティから見つけることができるのは、$$ childHead、$$ childTail、$$ nextSibling、$$ prevSiblingです。
現在使用しているアプローチは、親からchildHeadを取得し、nextSiblingを使用してnextSiblingがnullになるまで次の子を取得することです。
より良いアプローチはありますか?すべての子に対してメソッド[getModel]を呼び出したい場合、これを行うより良い方法はありますか?
子ディレクティブは分離されたスコープを使用しており、親からは見えない独自の値を持っています。親スコープからこれらの値にアクセスしたい。
「子スコープへのアクセスが必要な親スコープ」の問題に対処する「角度のある方法」は、モデルを親に移動し、子スコープが親プロパティ/データを参照するようにすることですローカルプロパティ/コピー)。たとえば、これは、各反復に入力フォーム要素が含まれる場合(つまり、各反復に双方向のデータバインディングが必要な場合)ng-repeatを処理する方法です。 ng-model、ng-repeat、inputsの難易度)
ディレクティブを使用して、最初に親スコープ内のオブジェクトの配列を定義してから、「=」表記法(つまり、双方向データバインディング表記法)を使用して、分離された各子スコープがその親スコープ配列(または個々のオブジェクト)にアクセスするようにします。オブジェクトは共有されているため、分離されたスコープは親オブジェクトを参照します(ローカルコピーは取得されません)。現在、子スコープのプロパティに加えた変更は、実際には親スコープのプロパティを変更しています。
すべてのAngularスコープはDOM要素にアタッチされます。現在の要素を使用して、到達したい子まで子を検査することから始めます。そこで、以下の関数を使用してスコープを取得します。
angular.element('#5th_element').scope();
AngularJS 1.3.2では、countChildScopes
メソッドがngMockモジュールに追加されました。
/** * @ngdocメソッド * @name $ rootScope.Scope#$ countChildScopes * @module ngMock * @description *現在のスコープのすべての直接および間接の子スコープをカウントします。 * *現在のスコープはカウントから除外されます。カウントには、すべての分離子スコープが含まれます。 * * @returns {number}子スコープの合計数。 */ function countChildScopes(scope) { // jshint validthis:true var count = 0; //現在のスコープを除外します var root = scope || angular.element(document).injector()。get( '$ rootScope'); var pendingChildHeads = [root。$$ childHead]; var currentScope; while(pendingChildHeads.length) { currentScope = pendingChildHeads.shift(); while(currentScope) { count + = 1; pendingChildHeads.Push(currentScope。$$ childHead); currentScope = currentScope。$$ nextSibling; } } return count; }
オブジェクトを戻り値として使用してIDを取得します。
function enumerateChildScopes(scope) { // jshint validthis:true var enum = {}; //現在のスコープを除外します var root = scope || angular.element(document).injector()。get( '$ rootScope'); var pendingChildHeads = [root。$$ childHead]; var currentScope; while(pendingChildHeads.length) { currentScope = pendingChildHeads.shift(); while(currentScope) { enum ["scope" + pendingChildHeads.length] = currentScope。$ id; pendingChildHeads.Push(currentScope。$$ childHead); currentScope = currentScope。$$ nextSibling; } } return enum; }
参考文献