2017-08-03 31 views
0

我需要填充的角度表接收到来自WebSocket的数据时角表:我试着用:重装当新的数据接收

<div ng-controller="MyCtrl" ng-app="myapp"> 
     <table ng-table="commentsTable"> 
      <tr ng-repeat="item in obj track by $index"> 
      <td class="plantCell">{{item.nome}}: </td> 
      <td class="statusCell">{{item.status}}</td> 
      <td class="statusCell">{{item.testo}}</td> 
     </tr> 
     </table> 
     </div> 
<script> 
    var app=angular.module('myapp', []); 
    var printOperation; 
    function GetFromLocalStorage(key) { 
     var items=localStorage.getItem(key); 
     console.log(items); 
     if (items===null){ 
      console.log("item null"); 
      return null; 
     } else { 
      if (typeof items!= "string") {items = JSON.stringify(items);} 
        return items; 
     } 
    } 
    app.controller('MyCtrl',  
       function ($scope) { 
        $scope.printComments=function(){ 
         $scope.obj=GetFromLocalStorage("AllComments"); 
         console.log("ricevo evento e ricarico tabella"); 
         console.log($scope.obj); 
         //$scope.commentsTable.reload(); 
        } 

        console.log("assegno print operation"); 
        printOperation=$scope.printComments; 
       } 
      ); 
      var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; 
      var eventer = window[eventMethod]; 
      var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; 
      eventer(messageEvent,function(e) { 
       console.log("ricevo messaggio"); 
       printOperation(); 
      },false); 
<script> 

Uncaught TypeError: Cannot read property 'reload' of undefined at $scope.printComments ((index):68) at (index):80

回答

1

如果您正在使用ngTable你应该把它注射到你的应用模块如angular.module("myapp", ["ngTable"]);

UPDATE:因此,在这个讨论这个问题,并获得更多的背景后,我可以假设数据是在事件监听器AngularJS环境之外修改,以便在视图不显示更新的价值,所以我认为包装printOperation$applyAsync应该有所帮助:

printOperation = $scope.$applyAsync($scope.printComments); 

而且我认为,逻辑应该在一个地方 - 控制器例如里面,因为它将使代码更具可读性和可维护性。

+0

如何重新加载? angular.module(“myapp”,[“ngTable”])。reload();产生相同的错误。 Moeover我在模块里面,我不需要引用它。此外,我需要在每次收到新推送时更新它。 –

+0

你需要在这行注入'var app = angular.module('myapp',['ngTable']);'。但是你真的使用['ngTable'](http://ng-table.com)?由于您还需要向控制器中注入['NgTableParams'](http://ng-table.com/api-docs/classes/ngtableparams.html),并正确初始化它们以与'ng-table'一起使用指示。或者你想简单地使用'ng-repeat'呈现表格?你为什么需要在某个地方调用'reload()'?只需更新'$ scope.obj'即可。 –

+0

不幸的是,如果我在表格呈现为空时更新obj,数据到达时不显示任何内容。每次服务器通过websocket提交更新的数据时,我都需要更新表格。也许如果我在第一次完成时动态地创建表格,但是当我需要再次更新表格时,我回到了开头。 –

相关问题