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

时间:2015-09-22 16:10:49

标签: javascript angularjs

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

http://jsfiddle.net/fpzknzej/3/

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

我目前的理解是,这只是做这种事情的错误方式,我需要做一些事情,包括changeCursor事件,只在角度世界中运作。但是,我不知道如何处理这个任务(自定义指令似乎是搜索这类事物时出现的最多的东西?)并且如果有一个很好的资源来理解如何与第三个进行交互角度范围内的派对事件处理程序。任何指向正确方向的人都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

尽量使这个变得简单。

所有角度核心事件指令(例如# strptime "09/05/1945 12:04:32" "%d/%m/%Y %H:%M:%S";; - : Core.Std.Time.t = 1945-05-09 08:04:32.000000-04:00 ng-click等)都会在内部自动调用ng-change

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

您真的只想在角度核心之外更改范围的事件需要更新视图时调用$apply()

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

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