【问题标题】:Making angular work with comet用彗星做角工作
【发布时间】:2014-10-09 19:03:49
【问题描述】:

我正在开发一个实时 Web 应用程序,我正在使用 Angular 作为 javascript 框架,在服务器端我正在使用 play 框架,为了制作实时应用程序,我正在使用彗星技术,基本上我从服务器推送脚本。

我实际上是在尝试从从服务器推送到角度控制器的脚本进行通信,但我有点卡住了。

这是我尝试过的。

我的观点:

<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 是不可能的,因为客户需要。

注意:在控制器中我做了很多与帖子无关的事情,为此我省略了,我真的需要角度注意变化。

谢谢。

【问题讨论】:

    标签: javascript angularjs playframework-2.0 comet


    【解决方案1】:

    您可以通过以下方式获取控制器的范围:

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

    还有一点,你应该注意的是,作用域是在页面加载之后初始化的,所以从作用域之外调用方法应该总是在页面加载之后进行。否则你将根本无法到达范围。

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2011-06-29
      • 2011-02-09
      • 2011-07-28
      • 1970-01-01
      • 2012-01-23
      • 2010-11-24
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多