我有一个元素,我使用$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/