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,但第一个选项仍然更可取)
答案 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地图会通知控制器有关收到的缩放更改事件。