分離スコープを使用せずに、ディレクティブ内から親スコープで関数を呼び出す方法を見つけることができないようです。分離スコープを使用する場合、分離で「&」を使用して親スコープの関数にアクセスできることはわかっていますが、必要のないときに分離スコープを使用すると結果が生じます。次の HTML を検討してください。
<button ng-hide="hideButton()" confirm="Are you sure?" confirm-action="doIt()">Do It</button>
この簡単な例では、JavaScript の確認ダイアログを表示し、確認ダイアログで [OK] をクリックした場合にのみ doIt() を呼び出します。これは、分離スコープを使用すると簡単です。ディレクティブは次のようになります。
.directive('confirm', function () {
return {
restrict: 'A',
scope: {
confirm: '@',
confirmAction: '&'
},
link: function (scope, element, attrs) {
element.bind('click', function (e) {
if (confirm(scope.confirm)) {
scope.confirmAction();
}
});
}
};
})
しかし、問題は、私が分離スコープを使用しているため、上記の例の ng-hide は親スコープに対して実行されなくなり、分離スコープで実行されることです (任意のディレクティブで分離スコープを使用すると、その要素のすべてのディレクティブが分離スコープを使用します)。これは、ng-hide が機能しない上記の例の jsFiddleです。(このフィドルでは、入力ボックスに「はい」と入力するとボタンが非表示になることに注意してください。)
別の方法は、分離されたスコープを使用しないことです。これは、このディレクティブのスコープを分離する必要がないため、実際にここで本当に必要なものです。私が抱えている唯一の問題は、分離されたスコープでメソッドを渡さない場合、親スコープでメソッドを呼び出すにはどうすればよいですか?
これは、私が分離スコープを使用しておらず、ng-hide が正常に動作している jsfiddleですが、もちろん、confirmAction() の呼び出しは機能せず、機能させる方法もわかりません。
私が本当に探している答えは、分離されたスコープを使用せずに外側のスコープで関数を呼び出す方法です。この確認ダイアログを別の方法で機能させることには興味がありません。この質問のポイントは、外側のスコープを呼び出す方法を理解し、親スコープに対して他のディレクティブを機能させることができるようにすることです。
または、他のディレクティブが親スコープに対して引き続き機能する場合、分離されたスコープを使用するソリューションについて聞きたいと思いますが、これは可能ではないと思います。