在这个例子中,我有一个带有附加指令的输入。该指令用于显示输入旁边的消息。还有另一个输入和一个添加消息的按钮。 显示某些消息后,使用附加指令关注输入应清除消息。 http://jsfiddle.net/viro/WBqxf/
所以我有一个带有隔离模型的指令,并且我试图在具有指令的元素成为焦点时更新模型。 看起来我必须在事件范围内包装事件回调。如果我想更新模型,则为$ apply:
element.on('focus',function(){
scope.$apply(function(){
console.log("focus !");
scope.tstMsg=[];
})
});
我想我必须将它包装在$ apply中,因为我正在使用jqlite事件回调,我猜它们在“外部”angularJS中运行,但我没有在文档中明确说明。
我做得对吗还是黑客攻击?
有更好的方法吗?
答案 0 :(得分:3)
每当您使用第三方库并执行更改时,您需要通过调用$apply()
来了解Angular。
正如@charlietfl所说,ng-focus更容易:
<强>的Controler 强>
$scope.focus = function() {
// Do something
}
<强> HTML 强>
<input ng-model="inp" tst-msg="message" ng-focus="focus()" />
参见 jsFiddle
答案 1 :(得分:2)
范围。$ apply将导致运行$摘要,因此范围内的任何观察者都会检查更改并在适当的时候触发。因为正如你所说,你只是绑定到一个事件(在适当的时候只是addEventListener / attachEvent)来做范围。$ apply在这个上下文中是有效的。