Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 了解如何在Angular中使用第三方事件处理程序_Javascript_Angularjs - Fatal编程技术网

Javascript 了解如何在Angular中使用第三方事件处理程序

Javascript 了解如何在Angular中使用第三方事件处理程序,javascript,angularjs,Javascript,Angularjs,我正在创建一个简单的Angular应用程序,它使用Ace编辑器(通过ui Ace)进行屏幕文本编辑。我希望在光标更改时运行一个处理程序,当光标位于某个位置时,该处理程序将更新模型对象。但是,我还希望能够单击按钮将光标移动到特定位置(并在必要时更新模型对象)。这里有一个jsfiddle演示了这个想法 当光标位于第二行的单词print的末尾时,模型对象将更新。问题是当移动光标时,第30行的$scope.$apply()将抛出一个进行中错误按钮被按下。但是,如果没有该线,则使用箭头键移动光标时,绑定

我正在创建一个简单的Angular应用程序,它使用Ace编辑器(通过ui Ace)进行屏幕文本编辑。我希望在光标更改时运行一个处理程序,当光标位于某个位置时,该处理程序将更新模型对象。但是,我还希望能够单击按钮将光标移动到特定位置(并在必要时更新模型对象)。这里有一个jsfiddle演示了这个想法

当光标位于第二行的单词
print
的末尾时,模型对象将更新。问题是当
移动光标时,第30行的
$scope.$apply()
将抛出一个进行中错误按钮被按下。但是,如果没有该线,则使用箭头键移动光标时,绑定到模型对象的视图将不会更新


我目前的理解是,这样做完全是错误的,我需要按照包装
changeCursor
事件的思路来做一些事情,以便仅在角度世界中操作。但是,我不知道如何完成这项任务(在搜索这类事情时,自定义指令似乎是出现最多的东西?),也不知道是否有很好的资源来理解如何在angular中与第三方事件处理程序交互。任何指向正确方向的指针都将不胜感激。

将尽可能简化此操作

所有角度堆芯事件指令,如
ng click
ng change
等,将在内部自动调用
$apply()

在使用移动光标的情况下,您使用
ng click
开始摘要,然后出现一个循环问题,从
ng click
中触发的外部ace事件也将调用
$apply()

只有当在角度核心之外改变范围的事件需要更新视图时,才需要调用
$apply()

针对您的情况的短期解决方法是使用
$timeout()
。 这将添加到当前摘要堆栈队列的末尾,并在其他摘要完成后调用$apply()


至于指令,是的,这段代码确实属于指令,但你们不会真的改变它的当前结构。。。只是将其移动到应用程序的不同部分。就短期而言,这不会改变目前正在发生的事情

好吧,酷。我想我确实理解了
ng click
et al.调用$apply和end。不过,归根结底,我很好奇:处理这个问题的“正确”方法是什么?和你现在做的没有太大区别。将第三方dom相关交互放在指令中是合适的。无法100%确定编辑器在dom操作方面需要做什么,或者是否需要多个实例