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