触发自定义jquery单击Angular Custom Directive

时间:2016-02-29 09:42:28

标签: javascript jquery angularjs

我正在使用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后)而不是仅在所有点击中打开吗?

enter image description here

2 个答案:

答案 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