当由文档绑定事件触发时,ngClass类的变化很慢
ngClass class change is slow when triggered from document-bound event
我已经在Angular中构建了一个下拉菜单元素指令。点击菜单按钮可以切换菜单,并且可以无缝地工作。但是,我的$document.click
绑定在点击发生时关闭菜单需要几秒钟的时间。
我在绑定和closeMenu
作用域函数上放置了一个断点。这两种情况都会立即发生,但是由ngClass属性导致的类更改似乎不会在一两秒钟内改变元素的类。
在这个视频中,我已经演示了关闭下拉菜单的两种方法:首先,通过点击下拉按钮,通过ngClick触发一个函数来改变menuActive
,从而关闭活动类。其次,通过单击触发$document
单击事件的菜单外部来更改与第一种方法相同的作用域变量。当不关闭下拉菜单按钮时,您可以看到大约2秒的延迟。
这是我的指令:
angular.module('dropdownDirective', [])
.directive('dropdown', function($document) {
'use strict';
return {
restrict: 'E',
transclude: true,
scope: {
ngIcon: '@',
ngCaret: '@',
ngLabel: '@'
},
templateUrl: '/gridsmart-web-client/directives/dropdown/dropdown.html',
link: function(scope, element) {
var handler = function(event) {
if (!element[0].contains(event.target)) {
scope.closeMenu();
}
};
$document.on('click', handler);
scope.$on('$destroy', function() {
$document.off('click', handler);
});
scope.clicked = false;
scope.positionDropdown = function() {
if (!scope.clicked) {
scope.clicked = true;
scope.buttonHeight = element.find('button')[0].offsetHeight + 'px';
}
};
},
controller: function($scope) {
$scope.menuActive = false;
$scope.toggleMenu = function () {
$scope.positionDropdown();
$scope.menuActive = !$scope.menuActive;
};
$scope.closeMenu = function() {
$scope.menuActive = false;
};
}
};
});
下面是下拉菜单的模板:
<div class="dropdown" ng-class="{active: menuActive}">
<button ng-click="toggleMenu()">{{ngLabel}}<i ng-class="ngIcon" ng-if="ngIcon"></i><b class="caret" ng-if="ngCaret"></b></button>
<ul ng-show="menuActive" ng-style="{'top': buttonHeight}" ng-transclude>
</ul>
</div>
ngClick按钮只是切换menuActive
的值。由于$document.click
绑定操作相同的变量,我无法想象为什么类的更改会慢得多。
尝试在事件处理程序中调用$apply()
:
$document.on('click', function(event) {
handler(event);
scope.$apply();
});
相关文章:
- 单击页面上的链接后高度发生变化
- React redux初始化功能,无论状态变化如何
- 角度ng变化或ng点击选择can'不起作用
- 每个选择器的Jquery css颜色都在变化,但字体大小却没有变化
- JS幻灯片与CSS背景颜色变化
- 重新加载页面时Javascript变量发生变化
- 如何获得Bootstrap Datepicker的年和月,因为它在变化
- 如何用jquery替换字符串中可能变化的字符
- 检测数据的变化
- 如何检测和打印变化变量LESS
- 当文本不断变化时,如何避免在按钮内移动文本
- 当数据库中的某些内容发生变化时调用HTTP方法Meteor.js
- jQuery将侦听器的大小调整为只触发宽度的变化
- 根据元素高度和宽度的百分比变化增加或减少字体大小
- 调用$.each()函数时上下文发生变化
- 创建一个不断变化的谷歌涂鸦风格的标题
- Javascript对象颜色动态变化
- 如果在编辑中下拉值发生变化,如何执行功能
- Angular ngClass 没有更新我的类,即使我的条件按预期发生了变化
- 当由文档绑定事件触发时,ngClass类的变化很慢