2017-03-08 11 views
1

AngularJsを使用して、Total Sent、Total SuccessおよびTotal Errorを取得して表示しようとしています。これまでは、コード内でTotal Sent、Total Success、Total Errorの情報を取得できました。しかし、私はバインドしてその状態を表示するために取ったアプローチ(グローバル変数を使用する)は正しいとは確信していません。angularJsデータバインディングでステータスを取得および表示する問題

ここに私のコントローラと関連サービスがあります。

var sent = 0; 
var succ = 0; 
var err = 0; 

myApp.service('ParseMessageService', function() { 
    this.myFunc = function(message) { 

    var res = message.match(/Success/g); 

    if (res !== null) { 
     //console.log(res); 
     TSent = message.match(/Total Sent: (\d+)/); 
     if (TSent) { 
     sent = TSent[1]; 
     //parsedMsg.push(TSent[1]); 
     //console.log(TSent[1]); //replace with $scope and display on Gui 
     } 
     TSucc = message.match(/Total Success: (\d+)/); 
     if (TSucc) { 
     succ = TSucc[1]; 
     //parsedMsg.push(TSucc[1]); 
     // console.log(TSucc[1]); //replace with $scope and display on Gui 
     } 
     TErr = message.match(/Total Errors: (\d+)/); 
     if (TErr) { 
     err = TErr[1]; 
     //parsedMsg.push(TErr[1]); 
     //console.log(TErr[1]); //replace with $scope and display on Gui 
     } 

    } 
    } 


    //} 
}); 

myApp.factory('WebSocketService', function() { 
    var service = {}; 

    service.connect = function() { 
    if (service.ws) { 
     return; 
    } 

    var ws = new WebSocket("ws://127.0.0.1:8000"); 
    ws.onopen = function() { 
     service.callback("Succeeded to open a connection"); 
     //display webSocket connected status 
    }; 

    ws.onerror = function() { 
     service.callback("Failed to open a connection"); 
    } 

    ws.onmessage = function(message) { 
     service.callback(message.data); 
    }; 

    service.ws = ws; 
    } 

    service.send = function(message) { 
    service.ws.send(message); 
    } 

    service.subscribe = function(callback) { 
    service.callback = callback; 
    } 

    return service; 
}); 

angular.module('myApp') 
    .controller('PingTestController', function($scope, WebSocketService, ParseMessageService) { 

    $scope.messages = []; 
    $scope.TSent = []; 
    $scope.TSucc = []; 
    $scope.TErr = []; 

    $scope.parsedSent = 0; 
    $scope.parsedSucc =0; 
    $scope.parsedErr =0; 
    $scope.pingStr = "Ping" 
    $scope.define = "Definitions"; 
    $scope.url = "www.google.com" 
    $scope.size = "1"; 
    $scope.TTL = "10" 
    $scope.pause = "3"; 
    $scope.paraStr = "[,]"; 
    $scope.cmdStartStr = "[;]"; 
    ($scope.trueStr) = "TRUE"; 
    ($scope.falseStr) = "FALSE"; 
    ($scope.PfalseStr) = "False"; 
    ($scope.cmdEndStr) = "[/]"; 
    //($scope.newLineStr) = "\r\n"; 
    ($scope.startCmd) = "Start"; 
    ($scope.stopCmd) = "Stop"; 
    ($scope.clearCmd) = "Clear"; 

    $scope.updatePing = function() { 

     $scope.pingCmd = ($scope.cmdStartStr) + ($scope.pingStr) + 
     ($scope.cmdStartStr) + ($scope.define) + ($scope.cmdStartStr) + 
     ($scope.url) + ($scope.paraStr) + ($scope.PfalseStr) + ($scope.paraStr) + 
     ($scope.TTL) + ($scope.paraStr) + 
     ($scope.size) + ($scope.paraStr) + 
     ($scope.pause) + ($scope.cmdEndStr); 

    } 

    WebSocketService.subscribe(function(message) { 
     ParseMessageService.myFunc(message); 
     $scope.parsedSent = (sent); 
     $scope.parsedSucc = (succ); 
     $scope.parsedErr= (err); 
     $scope.messages.push(message); 
     $scope.$apply(); 
    }); 

    $scope.connect = function() { 
     WebSocketService.connect(); 
     } 
     $scope.send = function() { 
     WebSocketService.send($scope.pingCmd); 
     $scope.text = ""; 
    } 

    //[;]Ping[;]Stop[;]TRUE[/] 
    $scope.stopPing = function() { 
     $scope.pingStop = ($scope.cmdStartStr) + ($scope.pingStr) + 
      ($scope.cmdStartStr) + ($scope.stopCmd) + ($scope.cmdStartStr) + 
      ($scope.trueStr) + ($scope.cmdEndStr); 
     WebSocketService.send($scope.pingStop); 

     } 
     // [;]Ping[;]Start[;]TRUE[/] 
    $scope.startPing = function() { 
     $scope.pingStart = ($scope.cmdStartStr) + ($scope.pingStr) + 
     ($scope.cmdStartStr) + ($scope.startCmd) + ($scope.cmdStartStr) + 
     ($scope.trueStr) + ($scope.cmdEndStr); 
     WebSocketService.send($scope.pingStart); 

    } 

    // [;]Ping[;]Clear;]TRUE[/] 
    $scope.clearPing = function() { 
     $scope.pingClear = ($scope.cmdStartStr) + ($scope.pingStr) + 
     ($scope.cmdStartStr) + ($scope.clearCmd) + ($scope.cmdStartStr) + 
     ($scope.trueStr) + ($scope.cmdEndStr); 
     WebSocketService.send($scope.pingClear); 

    } 
    }); 

ここにhtmlコードの関連部分があります。

<br/> 

<button ng-click="send()" class="btn"> Add new Ping</button> 
<button ng-click="startPing()" class="btn"> StartPing</button> 
<button ng-click="stopPing()" class="btn">Stop Ping</button> 
<button ng-click="clearPing()" class="btn">Clear Ping</button> 
<br /> 


<div ng-repeat = "message in messages track by $index"> 
    {{parsedSent}} {{parsedSucc}} {{parsedErr}} 
</div> 

結局、私はそれらの統計情報を取得し、すなわち緑の背景、青の背景に送信された赤と合計して総合誤差と総成功ウェブページ上で表示するためのクリーンな方法を持っていると思います。

答えて

0

グローバル変数をそこから使用するサービスに移動することができます。 Static javascript variable to be used as counter in Angularjs controller

+0

私の状況では、サービスへのグローバル変数の移動はそれ以来行われていませんが、後でそれらのグローバルをコントローラで使用します。 WebSocketService.subscribe(関数(メッセージ){ ParseMessageService.myFunc(メッセージ)=(送信) $ scope.parsedSent; $ scope.parsedSucc =(SUCC); $ scope.parsedErr =(ERR); $の範囲.messages.push(メッセージ); $ scope。$ apply(); }); 私はリンクを見ましたが、私が探しているものには答えないと思います。 – ari

+0

私とリンクが提供する答えは正しいと思います。サービスは一度だけインスタンス化されるので、そのプロパティをC#/ Javaのクラスの静的メンバーとして使用できます – robert