いつでもモデルで render を呼び出すことができ、指示したことは何でも実行します。あなたの場合、呼び出しngModel.$render()
はを取得して$modelValue
に渡しck.setData()
ます。$render
Angular は、ダイジェスト サイクル中に必要なときはいつでも (つまり、モデルが更新されたことに気付くたびに)自動的に呼び出します。$modelValue
ただし、特にディレクティブがコンパイルされる前に が設定されている 場合、Angular が適切に更新されない場合があることに気付きました。
ngModel.$render()
したがって、モーダル オブジェクトが設定されているときに簡単に呼び出すことができます。それに関する唯一の問題は、それを行うにはオブジェクトにアクセスする必要がngModel
あることですが、これはコントローラーにはありません。私の提案は、次のことを行うことです。
コントローラーで:
$scope.editRow = function (row, entityType) {
$scope.modal.data = row;
$scope.modal.visible = true;
...
...
// trigger event after $scope.modal is set
$scope.$emit('modalObjectSet', $scope.modal); //passing $scope.modal is optional
}
あなたのディレクティブで:
ngModel.$render = function (value) {
ck.setData(ngModel.$modelValue);
};
scope.$on('modalObjectSet', function(e, modalData){
// force a call to render
ngModel.$render();
});
これは特にクリーンなソリューションではありませんが、$render
必要なときにいつでも呼び出すことができるはずです。それが役立つことを願っています。
更新:(更新後)
コントローラーがネストされていることに気づきませんでした。これは Angular では非常に厄介な問題になる可能性がありますが、考えられる解決策をいくつか提供しようと思います (すべてのコードとプロジェクトのレイアウトを確認することはできません)。スコープ イベント (ここで説明されているように) は、スコープのネストに固有であり、イベントを子スコープにのみ発行します。そのため、次の 3 つの解決策のいずれかを試すことをお勧めします (個人的な好みの順序でリストされています)。
1) コードを再編成してレイアウトを整理し (コントローラーのネストを減らし)、スコープが (兄弟コントローラーではなく) 直接の子孫になるようにします。
2) それ1)
は不可能だったと思います。次に、関数を使用しようとし$scope.$broadcast()
ます。そのための仕様もここにリストされています。$emit
との違い$broadcast
は、$emit はイベントを子 $scope にのみ送信するのに対し、$broadcast はイベントを親スコープと子スコープの両方に送信することです。
3) angular でのイベントの使用を忘れて$scope
、汎用の JavaScript イベントのみを使用します (フレームワークを使用するか、こちらjQuery
の例のように独自のものをロールするだけです) 。