angularjs 在 $document 单击时关闭模式 window
angularjs close modal window on $document click
我整天都在为此工作,但我被困住了。单击 div 时会出现 modal/dialog(div 在 table 的第 th 个,我正在尝试创建排序选项)。 div 触发 ng-click 并将 $scope 变量设置为 true 或 false。单击 div 之外的任何位置时,我需要隐藏该模式。此外,还有多个 div 显示模态。如果单击另一个 div,则隐藏当前模态并使用该 $scope 再次显示模态。
<table>
<thead>
<th>Category 1 <div class="optionbox" ng-click="showModal($event)"></th>
<th>Category 2 <div class="optionbox" ng-click="showModal($event)"></th>
<th>Category 3 <div class="optionbox" ng-click="showModal($event)"></th>
</thead>
</table>
我有一个模态指令,它监视由 showModal() 设置的值并显示。
$scope.showModal = function(event){
$scope.isModalVisible = !$scope.isModalVisible;
}
模态指令:
angular.modal('app', []).directive('modal', function(){
return {
templateUrl : ...,
restrict : 'E',
link : function($scope, element, attrs){
...
$scope.$watch('isModalVisible', function(newVal, oldVal){
if(newVal){
element.slideUp(1000);
}else{
element.slideDown(1000);
}
}
}
关闭模态指令(设置为模态模板中的属性)
angular.modal('app', []).directive('globalModalClose', function(){
return {
link : function($scope, element, attrs){
$document.on('click', function(){
if(element.find('event.target').length() < 1){
element.hide()
}
});
}
我可能遗漏了一些东西,但这是我的问题。我点击 div 显示模态,然后立即将其关闭。这是因为我的 showModal 函数在我的 $document.on 侦听器之前被调用。我可以 1) 让点击侦听器先触发还是 2) 其他...
点击事件冒泡 DOM。因此,在模式打开后,您的 $document
的点击侦听器接收到与打开模式相同的点击事件。
您可以使用 event.stopPropagation() 来阻止事件进一步向上 DOM 冒泡到其他点击侦听器。 Angular 允许将 $event
传递给 ng-click
函数(正如您在 HTML 中看到的那样,您在其中传递 ng-click="showModal($event)"
。
因此,应用到您的代码中,您可以:
$scope.showModal = function(event) {
event.stopPropagation();
$scope.isModalVisible = !$scope.isModalVisible;
};
我整天都在为此工作,但我被困住了。单击 div 时会出现 modal/dialog(div 在 table 的第 th 个,我正在尝试创建排序选项)。 div 触发 ng-click 并将 $scope 变量设置为 true 或 false。单击 div 之外的任何位置时,我需要隐藏该模式。此外,还有多个 div 显示模态。如果单击另一个 div,则隐藏当前模态并使用该 $scope 再次显示模态。
<table>
<thead>
<th>Category 1 <div class="optionbox" ng-click="showModal($event)"></th>
<th>Category 2 <div class="optionbox" ng-click="showModal($event)"></th>
<th>Category 3 <div class="optionbox" ng-click="showModal($event)"></th>
</thead>
</table>
我有一个模态指令,它监视由 showModal() 设置的值并显示。
$scope.showModal = function(event){
$scope.isModalVisible = !$scope.isModalVisible;
}
模态指令:
angular.modal('app', []).directive('modal', function(){
return {
templateUrl : ...,
restrict : 'E',
link : function($scope, element, attrs){
...
$scope.$watch('isModalVisible', function(newVal, oldVal){
if(newVal){
element.slideUp(1000);
}else{
element.slideDown(1000);
}
}
}
关闭模态指令(设置为模态模板中的属性)
angular.modal('app', []).directive('globalModalClose', function(){
return {
link : function($scope, element, attrs){
$document.on('click', function(){
if(element.find('event.target').length() < 1){
element.hide()
}
});
}
我可能遗漏了一些东西,但这是我的问题。我点击 div 显示模态,然后立即将其关闭。这是因为我的 showModal 函数在我的 $document.on 侦听器之前被调用。我可以 1) 让点击侦听器先触发还是 2) 其他...
点击事件冒泡 DOM。因此,在模式打开后,您的 $document
的点击侦听器接收到与打开模式相同的点击事件。
您可以使用 event.stopPropagation() 来阻止事件进一步向上 DOM 冒泡到其他点击侦听器。 Angular 允许将 $event
传递给 ng-click
函数(正如您在 HTML 中看到的那样,您在其中传递 ng-click="showModal($event)"
。
因此,应用到您的代码中,您可以:
$scope.showModal = function(event) {
event.stopPropagation();
$scope.isModalVisible = !$scope.isModalVisible;
};