2014-10-29 31 views
0

我正在使用angular-ui-router应用程序处理angular.js。侦听文档单击事件的指令在创建后立即被触发

我在我的应用程序模仿一种弹出的状态。

我创建了一个指令,负责将应用移动到不同的状态,当有人点击弹出元素之外。

我创建了一个js.fiddle我的代码: http://jsfiddle.net/lobengula3rd/1e908559/8/

状态1 - 为弹出状态。

状态2 - 是一个不同的状态。

我在状态2,当点击它将使状态状态变为1(弹出状态)的链接:

<a ui-sref="state1">state1</a> 

这是我的指令代码:

.directive('closeOnOuterClick', ['$document', '$state', function ($document, $state) { 
     return { 
      restrict: 'A', 
      link: function (scope, element, attributes) { 

       $document.on("click", function (evt) { 
         $document.off('click'); 
         $state.go(attributes['closeOnOuterClick']); 
       }); 

       element.on("click", function (evt) { 
        evt.stopPropagation(); 
       }); 

      } 
     }; 
    }] 

的问题在于,由于某种原因,在创建popup元素后,'document.on'click事件的侦听器函数立即被触发,从而将我抛出。 我不明白为什么函数立即被调用。

如果我在我的控制器(第20行)上的应用程序开始我会去状态1,而不是状态2改变,它会工作得很好,第一次。

我试图改变这种改变状态的NG-click事件,这将调用一个函数在我的控制器的联系,但也没有工作。

我的代码有什么问题?

回答

1

我想通这个问题。

我有角的UI路由器版本0.2.0。更新到版本0.2.11解决了这个问题,原因不明。

如果我改变链接为ng-click而不是ui-sref调用最终会改变状态的函数,那么您应该直接调用$ event(angular object)stop传播,如下所示:

state1

-1

你有没有试过把指令里面的$文件改成元素?线28

element.on("click", function (evt) { 
      $document.off('click'); 
      $state.go(attributes['closeOnOuterClick']); 
}); 

,在捣鼓我的作品:http://jsfiddle.net/1e908559/10/

+0

这不会帮助我。我想把数据放在弹出窗口中。 我只需要点击弹出窗口外部的关闭 – lobengula3rd 2014-10-29 16:54:48

相关问题