の外側をクリックしたときのdivを非表示にするにはわからない:基本的に私のコードは、ポップアウトするDIV(引き出し)の上AngularJSを使用しているAngularJS input with focus kills ng-repeat filter of listこれは、この質問へのフォローアップの質問であるかのdiv
物事のリストをフィルタリングする権利。ほとんどの場合、これはUIがブロックされているので、そのブロックdivをクリックするとドロワーが閉じられます。しかし、場合によってはUIをブロックせず、検索をキャンセルしたり、ページ上の何かを選択したりするために、ユーザーが引き出しの外側をクリックできるようにする必要があります。
私の最初の考えは、引き出しが開いているときにwindow.onclickハンドラを付けることでした。引き出し以外のものがクリックされた場合、引き出しを閉じなければなりません。それが私が純粋なJavaScriptアプリでやる方法です。しかしAngularでは少し難しいです。ここで
は、私はヨッシーjsBin例@に基づいて、試料とjsfiddleです:このサンプルからコードのhttp://jsfiddle.net/tpeiffer/kDmn8/
関連する作品は以下の通りです。基本的に、ユーザーが引き出しの外側をクリックすると、$ scope.openをfalseに戻すように$ scope.toggleSearchを呼び出します。
コードは機能し、$ scope.openがtrueからfalseになっても、DOMは変更されません。私はこれがイベントのライフサイクルと関係していると確信しています。もしかしたら$スコープを変更したとき(それは別のイベントからです)、オリジナルではないコピーであることになります。
これが究極の再利用性のための指令になるでしょう。誰かが私に正しい方向を向けることができれば、私は感謝しています。
$scope.toggleSearch = function() {
$scope.open = !$scope.open;
if ($scope.open) {
$scope.$window.onclick = function (event) {
closeSearchWhenClickingElsewhere(event, $scope.toggleSearch);
};
} else {
$scope.$window.onclick = null;
}
};
と
function closeSearchWhenClickingElsewhere(event, callbackOnClose) {
var clickedElement = event.target;
if (!clickedElement) return;
var elementClasses = clickedElement.classList;
var clickedOnSearchDrawer = elementClasses.contains('handle-right')
|| elementClasses.contains('drawer-right')
|| (clickedElement.parentElement !== null
&& clickedElement.parentElement.classList.contains('drawer-right'));
if (!clickedOnSearchDrawer) {
callbackOnClose();
}
}
大変ありがとうございます。その$ applyはまさに私が行方不明だったものでした!私はAngular(プロフェッショナル)を使用して5日目にいますが、まだ慣れ親しんでいると私はしばらく時間がかかります。私は近い将来に恩恵を返すことができたらうれしいです!私はJSBinのディレクティブをチェックし、それが完了して作業したときに結果を投稿します。 –