AngularJS 关闭一个在 ng-click 上显示的 div
AngularJS 关闭一个在 ng-click 上显示的 div
我创建了一个按钮
点击按钮时显示一个并再次点击时切换回去!
$scope.chooseOptions=function(){ $scope.appearOnChoice=!$scope.appearOnChoice; }
然而,当用户点击这个div
元素以外的任何地方,我也希望这个元素再次隐藏起来。我应该怎么做?我需要严格使用AngularJS而不使用jQuery。
希望你能帮我解决这个问题。
编辑:我尝试了一些bootstrap日期选择器的事件,但我不确定如何正确应用它
$scope.$on('datepicker.focus', focusElement); scope.$watch('isOpen', function(value) { if (value) { scope.$broadcast('datepicker.focus'); scope.position = appendToBody ? $position.offset(element) : $position.position(element); scope.position.top = scope.position.top + element.prop('offsetHeight'); $document.bind('click', documentClickBind); } else { $document.unbind('click', documentClickBind); } }); var focusElement = function() { $timeout(function() { self.element[0].focus(); }, 0 , false); };
我该如何将其调整到我的情况下?!
AngularJS中,有一个问题是在点击事件中关闭一个显示的div。最简单和最清洁的处理方法是在文档中注册一个事件,当除了div及其子元素外的任何其他元素被点击时,该元素将被移除。
解决这个问题的方法是使用一个服务,该服务在注册点击事件时会处理关闭div的操作。具体的示例代码可以在GitHub的EnzeyNet/Services项目中找到,链接为:https://github.com/EnzeyNet/Services/blob/master/src/nzServices.js。
需要注意的是,这个示例代码中缺少文档说明,但是在注入该服务后,可以按照以下方式使用:
var divElem; nzService.registerClickAwayAction(function() { divElem.remove(); }, divElem);
以上就是解决AngularJS中关闭显示的div的问题的原因和解决方法。
AngularJS关闭一个在ng-click上显示的DIV的原因是DIV失去焦点,解决方法有两种:
1. 如果DIV已经有焦点,可以使用ng-blur指令在DIV上运行set appearOnChoice为false。
2. 如果DIV没有焦点,需要在代码中操作DOM(提供焦点)或创建一个自定义指令来设置焦点,使ng-blur指令起作用。
另外,还可以在视图上的每个可点击对象上添加ng-click指令,以在触发时隐藏DIV,但这不是最佳解决方法。
其中一个基本问题是,当div可见时,点击它后按钮会失去焦点,同时div也不会获得焦点。因此,通过DOM点击设置div的焦点似乎是不可能的。可以尝试给div添加tabindex属性。
参考链接:
- [设置元素焦点的Angular方式](https://stackoverflow.com/questions/25596399)
- [通过tabindex设置div焦点](http://stackoverflow.com/a/148444/2719246)