分離スコープを使用せずに、ディレクティブ内から親スコープの関数を呼び出す方法を見つけることができないようです。分離スコープを使用する場合、分離で "&"を使用して親スコープの関数にアクセスできることを知っていますが、必要がないときに分離スコープを使用すると影響があります。次の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です。(このフィドルでは、入力ボックスに「yes」と入力すると、ボタンが非表示になることに注意してください。)
代わりに、分離されたスコープを使用しないこともできます。これは、このディレクティブのスコープを分離する必要がないため、実際にここで本当に必要なものです。私が持っている唯一の問題は、分離されたスコープに渡さない場合、親スコープのメソッドをどのように呼び出すのですか?
これは、孤立スコープを使用していないng-hideのjsfiddleですが、もちろん ng-hideは正常に動作していますが、confirmAction()の呼び出しは機能せず、動作させる方法がわかりません。
注意してください、私が本当に探している答えは、分離されたスコープを使用せずに外部スコープの関数を呼び出す方法です。また、この確認のポイントは、外部スコープを呼び出す方法を理解し、それでも他のディレクティブを親スコープに対して機能させることができるためです。
または、他のディレクティブがまだ親スコープに対して機能する場合、分離されたスコープを使用するソリューションについて聞いてみたいと思いますが、これは可能ではないと思います。