2014-02-22 42 views
3

新角度,所以我很抱歉,如果這個問題很愚蠢。通知AngularJS控制器關於來自外部的事件

所以我在做一個應用程序,它的一個部分是角的「範圍」可以這麼說之外,這部分是負責接收傳入消息(XMPP)

再有就是角控制器必須通知收到的消息。我所做的是一個醜陋的解決辦法,但它的工作原理:

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(techincally我可以直接附加傳入的消息到view.html使用jQuery無角,但第一個選項是更優選的)

回答

2

您應該在有傳入消息時觸發事件。

在有外來消息時,在outside.js中使用$broadcast

在controller.js中,等待$on發生該事件。

下面是一個簡單的例子:http://jsfiddle.net/simpulton/XqDxG/

+0

謝謝你的迴應。如何在角度未定義的地方使用$ broadcast? – mikek

+1

我希望這會做這項工作,而不使用$廣播。 http://stackoverflow.com/questions/15294565/angular-is-it-possible-to-watch-a-global-variable-i-e-outside-a-scope。 – tomepejo

1

...技術上我可以直接附加傳入的消息使用jQuery無角

到view.html我強烈建議只使用Angualrjs。 (對我來說,我會刪除jQuery,並只在指令中的特定情況下使用)。角本身包括其

新建角內jQuery的精簡版版...

請點擊此How do I 「think in AngularJS」 if I have a jQuery background?首先,它會使事情更清楚一點

所以我希望你的例子中的outside.js:表示一些獲取事件並需要通知控制器的指令邏輯。

我們可以將事件監聽到指令中,指令可以通過使用$eval來通知控制器。這是基本的例子,如何$eval作品:演示Fiddle

然而(用於隔離範圍)的另一種方式是僅僅地圖事件的方法。請看THIS例如Google地圖通知控制器收到縮放更改事件。