$watch ターゲットを持つ配電盤として機能するモデルを共通の祖先に作成する場合は、既存の機能を使用して、各ディレクティブを変更したり、その配電盤モデルを監視したりできます。コンポーネントのアクセス モードとコンテンツ コンテンツのコントローラには、スコープごとに 2 つの非常に異なる呼び出しシグネチャがあり、トランスクルージョンされたケースにはわずかな「落とし穴」があります。
双方向バインディングによる分離スコープ
ディレクティブの Isolate スコープを登録するとき、=attrName" により、"attrName" という名前の domainName プロパティが検査されます。Angular は、いずれかのスコープのモデルの値の変更が兄弟スコープのモデルにも影響するように、双方向バインディングを設定します。 .
例
controller-parent.js で:
module.controller( 'ParentController', function() {
$scope.switchboard = { };
}
ディレクティブ-sg-dialogue.js 内
return {
scope: {
isolatedPeer: "=dialogModel"
};
... ディレクティブ メタデータ内 ...
<div ng-controller="ParentController">
<sg-dialog dialog-model="switchboard">
<div ng-controller="ChildController"></div>
</sg-dialog>
</div>
... いくつかのアプリケーション ビュー テンプレートで、そして ...
$scope.switchboard = { isApplied: false }
...アプリケーションビューテンプレートにバインドされたコントローラー内...
次に、すべての準備が整いました...
$scope.$watch( 'switchboard.isApplied', function(newValue, oldValue) { })
... 共通の祖先で、... の後にコールバックを取得します。
isolatedPeer.isApplied = true;
... 隔離された範囲で。
プロトタイプの継承
トランスクルードされた子に $scope.swtichboard を明示的に設定しない限り、トランスクルードされた子の角度式から「switchboard.isApplied」にアクセスし、補間エンジンに、割り当てられて保存された値を「見つけさせる」ことができます。独自のスコープ内の親コントローラー。
たとえば、次のコールバックは、ペア ダイアログ ボックスが閉じられるたびに呼び出されます。
$scope.$watch( 'switchboard.isApplied', function(newValue, oldValue) { } );
トランスクルージョンされた子には、分離されたスコープではなく、常に基本的なスコープが与えられるため、これは機能します。
これが役に立てば幸いです!