2014-10-09 54 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> 

一件事,你应该注意的是,作用域在页面加载后初始化,因此调用来自外部的方法范围应始终在加载页面后完成。否则你根本无法达到范围。