通知AngularJS控制器关于来自外部的事件

时间:2014-02-22 21:52:33

标签: javascript jquery angularjs

Angular的新手,所以如果问题很愚蠢我会道歉。

所以我正在创建一个应用程序,其中一部分是在Angular的“范围”之外,可以这么说,这部分负责接收传入消息(xmpp)

然后有一个Angular控制器必须收到有关传入消息的通知。我所做的是一个丑陋的工作,但它的工作原理:

view.html:

<button ng-click="refreshLayout()" id="refreshLayoutButton" style="display:none"></button>

controllers.js:

.controller('chatCtrl', function($scope) {
     $scope.refreshLayout = function() { ... }
})

outside.js:

if(incomingMessage) {
     $("#refreshLayoutButton").click();
     // append the message to view.html
}

有没有排除jQuery?我想将来自outside.js的消息发送到chatCtrl,然后将其发送到view.html

OR

只是通知事件所以它可以调用$ scope.refreshLayout(技术上我可以使用没有Angular的jQuery直接将传入的消息附加到view.html,但第一个选项仍然更可取)

2 个答案:

答案 0 :(得分:2)

当有传入消息时,您应该触发事件。

在outside.js中,当有传入消息时使用$broadcast

在controller.js中,$on等待该事件发生。

以下是一个简单示例:http://jsfiddle.net/simpulton/XqDxG/

答案 1 :(得分:1)

  

...从技术上讲,我可以使用不带Angular的jQuery将传入的消息直接附加到view.html

我强烈建议仅使用Angualrjs。 (对我来说,我会删除jQuery并仅在指令中的特定情况下使用)。 Angular本身包含 jQuery-lite 版本

  

Angular的新手......

首先请遵循 How do I “think in AngularJS” if I have a jQuery background? ,这会让事情变得更清晰

所以我希望你的例子中的outside.js:意味着一些获取事件并需要通知控制器的指令逻辑。

我们可以将事件倾听到指令,并且指令可以通过使用$eval来通知控制器。以下是$eval如何运作的基本示例:演示 Fiddle

但是(对于隔离范围),另一种方法是 map 事件方法。请查看 THIS 示例,其中Google地图会通知控制器有关收到的缩放更改事件。