Javascript 如何在AngularJS中观察自定义事件?

Javascript 如何在AngularJS中观察自定义事件?,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,简单示例:我有一个textarea,希望为其提供其他行为:按enter键执行操作,然后按shift+enter 我想我应该提供额外的指令来添加该行为。我已经做到了: 还有一件黑客的事情对我来说似乎很奇怪:我手动调用$digest()。可以吗?有什么想法吗 JS: 角度模块('Chat',[]) .指令('enterSubmit',函数(){ 返回{ 限制:“A”, 链接:函数(范围、元素、属性){ var提交; $(元素)({ 向下键:功能(e){ 提交=错误; if(e.which==13&&

简单示例:我有一个textarea,希望为其提供其他行为:按
enter
键执行操作,然后按
shift+enter

我想我应该提供额外的指令来添加该行为。我已经做到了:

还有一件黑客的事情对我来说似乎很奇怪:我手动调用
$digest()
。可以吗?有什么想法吗

JS:

角度模块('Chat',[]) .指令('enterSubmit',函数(){ 返回{ 限制:“A”, 链接:函数(范围、元素、属性){ var提交; $(元素)({ 向下键:功能(e){ 提交=错误; if(e.which==13&&!e.shiftKey){ 提交=真; e、 预防默认值(); } }, keyup:函数(){ 如果(提交){ 范围$eval(attrs.enterSubmit); //手动刷新模型更改 范围。$digest(); } } }); } }; }); 函数ChatCtrl($scope){ $scope.messages=[{ 文本:“示例消息”, 日期时间:新日期() }]; $scope.add=函数(){ $scope.messages.push({ text:$scope.message, 日期时间:新日期() }); $scope.message=''; }; $scope.message=''; }

留言:
单击“输入”提交:)

发送消息! 消息列表: 正文 日期 {{message.text} {{message.datetime}日期:“HH:mm:ss”}

但这样做正确吗?

是的,在指令的链接函数中绑定事件正是您想要做的


调用$digest并不困难-示例中的消息是在
keyup
上添加到模型中的,Angular不会消化这些更改,直到有人告诉它。它实际上会在下一次
keydown
时被消化,但由于您需要在
keydup
之后生成$digest,因此您必须手动调用它。

太好了,谢谢您的解释。但我对事件还不了解。AngularJS正在侦听页面上的所有事件,然后检查每个对象的状态?有什么可以理解的文章吗?我在AngularJS上读过这方面的文章,但很难很快理解。我推荐作为一个很好的参考。