将事件发送到范围

时间:2015-12-02 15:35:12

标签: javascript angularjs angularjs-directive

我试图创建一个带有角度的指令,用于显示多选项,将其选项加载到带有ajax调用的模板中。 这是我现在的指示:

function AngularMultiselect () {
    return {
        restrict: 'E',
        replace: true,
        templateUrl: 'temp.html',
        scope: {
            tipo: "@"
        },
        link: function(scope, element, attrs){
            scope.open_tab = function(){
                element.addClass('open');
                $(document).on("click",function(){ //beign called at the same time
                    console.log("document clicked");
                });
            };
            console.log('multiselect being called');

        }
    }
}

HTML:

<filtro tipo="client"></filtro>

在模板内:

<button type="button"
        class="multiselect btn"
        ng-click="open_tab()">

我遇到的问题是标签会在同一次点击时打开和关闭。我会使用该活动来阻止活动的传播,但我无法发送...我已尝试open_tab($event),但$event包含'client' 。有什么想法吗?

在这里你可以看到它有效:http://codepen.io/vandervals/pen/VeZrdV

1 个答案:

答案 0 :(得分:0)

只需将文档单击处理程序附加延迟即可避免此问题:

而不是:

scope.open_tab = function(){
                element.addClass('open');
                $(document).on("click",function(){ //beign called at the same time
                    console.log("document clicked");
                });
            };

只是这样做:

scope.open_tab = function(){
  element.addClass('open');
  $timeout(function() {
    $(document).on("click",function(){ //no longer beign called at the same time
      console.log("document clicked");
    });
  }, 1, false);
};

避免初始点击事件触发第二个处理程序