Javascript 触发自定义jquery单击角度自定义指令
我正在为multiSelect下拉菜单使用自定义指令。我需要一个自定义按钮来打开和关闭多选列表 问题:我得到的$apply已在进行中错误 解决方案:为了解决这个问题,我将jQuery函数包装在$timeout 然而,现在我可以自定义点击指令,我的multiSelect将打开,但现在如果在第二次点击时我想关闭选择框,它将闪烁并保持打开状态;( 指令:Javascript 触发自定义jquery单击角度自定义指令,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我正在为multiSelect下拉菜单使用自定义指令。我需要一个自定义按钮来打开和关闭多选列表 问题:我得到的$apply已在进行中错误 解决方案:为了解决这个问题,我将jQuery函数包装在$timeout 然而,现在我可以自定义点击指令,我的multiSelect将打开,但现在如果在第二次点击时我想关闭选择框,它将闪烁并保持打开状态;( 指令: if (!parentFound) { $scope.$apply(function(){ $scope.open = fa
if (!parentFound) {
$scope.$apply(function(){
$scope.open = false;
});
}
有人能提出一个解决方案,让我现在(在使用$timeout之后)切换多选下拉菜单,而不是只在所有单击中打开吗
将其从
$范围中删除。$apply
如图所示
if(!parentFound){
函数(){
$scope.open=false;
};
}
为此,首先需要了解$scope.$apply()
AngularJs在内部为在view中创建的所有数据绑定创建一个“监视”,并调用$scope.$digest(),它依次遍历所有监视并检查是否有任何被监视的变量已更改。当调用$scope.$apply()时,它在内部调用$scope.$digest(),以便刷新数据绑定
侦听器指令(如ng click)向DOM注册侦听器。当DOM侦听器启动时,该指令执行关联的表达式并使用$apply()方法更新视图
当接收到外部事件(如用户操作、计时器或XHR)时,必须通过$apply()方法将关联的表达式应用于作用域,以便正确更新所有侦听器()
因此,在您的示例中,$scope.$apply()已在单击事件时被调用,因此引发了一个错误
也可用于读取仅否定
$scope
值:
$scope.$apply(function() {
if($scope.open) { //only close when it is open
$scope.open = !$scope.open;
}
});
如果您希望在选择框外单击时关闭下拉列表,则可以使用另一个自定义指令,该指令在窗口上侦听单击事件。这将广播一个新事件,您可以侦听该事件:
myApp.directive('dropdownListener', function ($window, $rootScope) {
return {
restrict: 'A',
link: function(scope, element, attr) {
var w = angular.element($window);
w.bind('click', function(){
$rootScope.$broadcast('dropdown:close');
});
}
}
});
这意味着您可以通过包含侦听器下拉列表:close
事件来修改原始操作:
$scope.$on('dropdown:close', function (event, data) {
$scope.$apply(function() {
if($scope.open) { //only close when it is open
$scope.open = !$scope.open;
}
});
});
$scope.$on('dropdown:close', function (event, data) {
$scope.$apply(function() {
if($scope.open) { //only close when it is open
$scope.open = !$scope.open;
}
});
});