angularJS element.on回调和范围.$ apply

Dav*_* V. 6 angularjs angularjs-directive jqlite angularjs-model

在这个例子中,我有一个附加指令的输入.该指令用于显示输入旁边的消息.还有另一个输入和一个添加消息的按钮.显示某些消息后,使用附加指令关注输入应清除消息. http://jsfiddle.net/viro/WBqxf/

所以我有一个带有隔离模型的指令,我正在尝试在具有指令的元素成为焦点时更新模型.好像我必须在事件范围内包装事件回调.$ apply如果我想更新模型:

element.on('focus',function(){
    scope.$apply(function(){
        console.log("focus !");
        scope.tstMsg=[];
    })
});
Run Code Online (Sandbox Code Playgroud)

我想我必须将它包装在$ apply中,因为我正在使用jqlite事件回调,我猜它们在"外部"angularJS中运行,但我没有在文档中明确说明它.

我做得对吗还是黑客攻击?

有没有更好的方法呢?

sha*_*ain 2

scope.$apply 将导致 $digest 运行,因此作用域上的任何观察者都会检查更改并在适当的情况下触发。因为正如您所说,您只是绑定到一个事件(在适当的情况下只执行 addEventListener/attachEvent ),在此上下文中执行 range.$apply 是有效的。