2014-08-28 98 views
0

我有一个自定义的弹出式面板,我想添加功能,以便在面板外单击屏幕时关闭。我创建了一个指令来完成这个任务,但是我很难说明关闭事件发生了。Angular指令,触发范围函数

<div ng-if="ui.showConfig" auto-hide="ui.showConfig=false">...</div> 

JS

myApp.directive('autoHide', 
    [function() { 
     return { 
      restrict: 'A', 
      scope: { 
       'autoHide': '&' 
      }, 
      link: function (scope, element, attrs) { 
       var $overlay = $("<div style='position:absolute;top:0;left:0;width:100%;height:100%;z-index:2000;'>"); 
       $overlay 
        .appendTo("body") 
        .one("click", function(e){ 
         element.hide(); 
         $overlay.unbind().remove(); 
         // This is not firing... 
         // scope.autoHide(); 
        }); 

       element.css("zIndex", "2001"); 

       element.on('$destroy', function() { 
        $overlay.unbind().remove(); 
       }); 
      } 
     }; 
    }]); 

Here is a jsfiddle

叠加点击事件被触发。该小组正在隐藏。但是ui.showConfig未设置为false,导致用户下次按两次以打开面板。

此外,如果有另一种方法,我应该考虑请让我知道!

+0

您可以发布在plunker你的代码? – PSL 2014-08-28 19:09:57

回答

1

里面你需要调用scope.$apply()使角被告知改变的事件处理程序:

// This is not firing... 
scope.autoHide(); 
scope.$apply(); 
+0

完美,这正是我需要的! – Malk 2014-08-28 21:33:40

0

我想在第一个建议您不要使用jQuery的DOM中多余的元素或别的东西追加的,也是我想建议使用已经建立angular bootstrap modal 它将给你更多的优势。您可以检查链接并查看示例以及如何将模块包含在项目中。我非常确定弹出式bootstrap mpodal所需的所有功能。