我正在使用multiSelect下拉列表的自定义指令。我需要使用自定义按钮打开和关闭multiSelect列表的自定义tirggering。
问题: 我的 $申请已在进行中错误
解决方案: 为了解决这个问题,我将jQuery函数包装在 $ timeout
中if (!parentFound) {
$scope.$apply(function(){
$scope.open = false;
});
}
但是,现在我可以自定义点击指令,我的multiSelect会打开,但现在如果在第二次点击我要关闭选择框,它会闪烁,并保持打开状态。 ;(
指令:
<dependency>
<groupId>com.sendgrid</groupId>
<artifactId>sendgrid-java</artifactId>
<version>2.2.2</version>
</dependency>
有人可以提出一个解决方案,以便我现在切换多选下拉列表(使用$ timeout后)而不是仅在所有点击中打开吗?
答案 0 :(得分:1)
将其从$scope.$apply
中删除为
if (!parentFound) {
function(){
$scope.open = false;
};
}
首先需要了解$ scope。$ apply()
AngularJs创造了一个&#34;手表&#34;在视图中创建的所有数据绑定内部,并调用$ scope。$ digest(),它反过来遍历所有监视并检查是否有任何监视变量发生了变化。当你调用$ scope。$ apply()时,它在内部调用$ scope。$ digest(),这样数据绑定就会被刷新。
监听器指令(例如ng-click)向DOM注册监听器。当DOM侦听器触发时,该指令执行关联的表达式并使用$ apply()方法更新视图。
当收到外部事件(例如用户操作,计时器或XHR)时,必须通过$ apply()方法将关联表达式应用于作用域,以便正确更新所有侦听器(ref )。
所以在你的情况下$ scope。$ apply()已经在click事件上被调用,因此抛出错误。
也可以用来阅读this
答案 1 :(得分:1)
仅取消url(r'^image/$',views.ImageList.as_view(),name='image_list'),
url(r'^image/(?P<pk>[0-9]+)/$',views.ImageDetail.as_view(),name='image_detail')
值:
$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');
});
}
}
});
事件来修改原始操作:
dropdown:close