2014-10-09 56 views
1

我正在開發一個實時的Web應用程序,我使用角度作爲JavaScript框架,並在服務器端我使用玩框架,使實時應用程序,我使用彗星技術,基本上我從服務器推送腳本。與角彗星做角工作

我實際上是嘗試通過從服務器推送到角度控制器的腳本進行通信,而且我有點卡住了。

這是我試過的。

筆者認爲:

<div id="workStation" ng-controller="workStation">  
    ....  
    <input type="text" id="bridge" ng-change="serverEvent()" ng-model="bridge"> 
    <iframe hidden="hidden" id="messages" src="/register"></iframe> 
</div> 

我的控制器

var app = angular.module('debQApp',[]); 
app.controller('workStation'['$scope','$timeout','$interval','api','websocket','$http','$q',function($scope,$timeout,$interval,api,websocket,$http,$q) 
{ 
     .... 
     $scope.bridge = 'waiting'; 


     $scope.serverEvent = function() 
     { 
      console.log('Event'); 
     }; 
} 

的問題是,該功能serverEvent從不打電話。我從服務器推送的腳本只修改輸入。

<script>parent.document.getElementById('bridge').value = 'event';</script> 

其實劇本完成自己的工作,因爲我看到了輸入改變其價值,但我不能讓角的通知的變化。

由於客戶需要,使用不同的技術作爲websocket不是可能的。

注意:在控制器中,我做了很多與帖子無關的事情,因爲這個原因,我省略了,我真的需要注意這個改變。

謝謝。

回答

1

你可以得到控制的範圍像這樣的東西:

<script> 
    var cometListener = function(event){ 
     angular.element($('#workStation')).scope().serverEvent(event); 
    } 
</script> 

一件事,你應該注意的是,作用域在頁面加載後初始化,因此調用來自外部的方法範圍應始終在加載頁面後完成。否則你根本無法達到範圍。