了解如何在Angular中使用第三方事件处理程序
Understanding how to use 3rd-party event handlers in Angular
我正在创建一个简单的Angular应用程序,它使用Ace编辑器(通过ui-ace)在屏幕上编辑文本。我想要一个处理程序运行时,光标的变化,这将更新一个模型对象,当光标在某个位置。但是,我还希望能够单击按钮以将光标移动到特定位置(并在必要时更新模型对象)。下面是演示这个想法的示例。
http://jsfiddle.net/fpzknzej/3/当游标放置在第二行单词print
的末尾时,模型对象更新。问题是,当按下Move Cursor!
按钮时,第30行上的$scope.$apply()
将抛出正在进行的错误。但是,如果没有这一行,当用箭头键移动光标时,绑定到模型对象的视图将不会更新。
我目前的理解是,这只是做这种事情的错误方式,我需要做一些事情,沿着包装changeCursor
事件的路线,仅在角世界中操作。然而,我对如何处理这个任务感到茫然(自定义指令似乎是搜索这类事情时出现最多的东西?),如果有一个很好的资源来理解如何在angular中与第三方事件处理程序交互。
我会尽量让这一切变得简单。
所有angular核心事件指令,比如ng-click
、ng-change
等,都会在内部自动调用$apply()
。
在您使用移动光标的情况下,您使用ng-click
开始摘要,然后有一点循环问题,从ng-click
内部触发的外部ace事件也将调用$apply()
。
你只需要在angular核心之外的事件改变作用域时才需要调用$apply()
。
针对您的情况的短期解决方案是使用$timeout()
代替。这将被添加到当前摘要堆栈队列的末尾,并在其他摘要完成后调用$apply()。
至于指令,是的,这段代码确实属于指令,但你不会真正改变它当前的结构…只是将它移动到应用程序的不同部分。短期内,这不会改变当前发生的事情
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- dropdown.js中的复杂事件处理
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 复选框,然后单击事件处理
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在 JavaScript 代码中调试点击事件处理
- 如何在jQuery事件处理程序中存储和重用超时
- 如何禁用第三方引入的javascript事件处理程序
- 了解如何在Angular中使用第三方事件处理程序