2017-08-03 35 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提交更新的數據時,我都需要更新表格。也許如果我在第一次完成時動態地創建表格,但是當我需要再次更新表格時,我回到了開頭。 –

相關問題