我有一个元素,我使用$swipe .bind(从ngTouch开始)来连接控制器构造函数中的一些事件处理程序:

$swipe.bind($(element_selector), {'move': dragMoveHandler});


我将该元素移到ngInclude中,但是现在控制器构造函数在AngInclude处理ngInclude之前运行,因此$swipe.bind调用失败,因为$(element_selector)undefined执行时会失败。

我调查了使用$includeContentLoaded来检测ngInclude何时被处理,但是尚不清楚每次触发时已加载了哪个ngInclude,因此我的代码需要先计算已加载的include的数量,然后才能知道可以安全使用$swipe.bind,这似乎不是一个可靠的解决方案。

我怎样才能做到这一点?

最佳答案

为什么在触发$ includeContentLoaded时不简单地检查元素是否存在

$rootScope.$on('$includeContentLoaded', function(event) {
   if($(element_selector).length){
       $swipe.bind($(element_selector), {'move': dragMoveHandler});
   }
});


或者,如果您想避免注入$ rootScope并使用角度事件,为什么不以简单的原始JavaScript方法简单地执行此操作

setTimeout(function check_if_element_exist(){
   if($(element_selector).length){
       $swipe.bind($(element_selector), {'move': dragMoveHandler});
   }
   else {
       setTimeout(check_if_element_exist, 0);
   }
}, 0);


您甚至可以将此逻辑移至装饰性指令,以免违反SoC原理。

关于javascript - 如何在ngInclude内的元素上使用$ swipe.bind(ngTouch)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27222800/

10-12 15:58