代码之家  ›  专栏  ›  技术社区  ›  Daine MacTavish

从另一个javascript推送角度图数据

  •  0
  • Daine MacTavish  · 技术社区  · 8 年前

    我在data_controller.js中有一个数组,我希望main.js(在那里编辑角度图)能够获取数组。有什么具体办法吗?

    数据控制器.js:

    /*global angular*/
    var app = angular.module('statisticsApp', [chart.js]).controller('myCtrl',
    function ($scope, $http) {
    "use strict";
    return $http({
        method : "POST",
        url : "GatewayAPI.php",
    
    }).then(function mySuccess(response) {
        $scope.records = response.data;     
        var mydata,myJSON,myresult,myjava, myobj;
        var i;
        var Result; 
        var chartResultTemp = [];
        var chartResultph = [];
        var chartResultHum = [];
        var resultType = [];
    
    
        for(i=0; i<72;i++)
        {
            //storing data
            mydata = $scope.records.data[i];
    
            //retrieving data
    
            myobj = mydata.data.substring(3,4);
            resultType = mydata.data.substring(3, 4);
    
            if(resultType === "A") {
                chartResultTemp.push([mydata.data.substring(6,9)]);
            } else if (resultType ==="B") {
                chartResultph.push([mydata.data.substring(6, 9)]);   
            } else {
                chartResultHum.push([mydata.data.substring(6, 9)]);   
            };
    
    
            $scope.test=Result; //change to array
            $scope.test2=chartResultTemp;
            $scope.test3 = resultType;
            $scope.test4 = chartResultph;
            $scope.test5 = chartResultHum;
    
            console.log(Result);
            console.log(resultType);
        }
    
    
    
    
        $scope.gotTemp = false;
        $scope.gotHumidity = false;
        $scope.getSoilMoisture = false;
    
       });
    
    });
    

    主要工作:

    var app = angular.module("statisticsApp", ["chart.js"]);
    app.controller("LineCtrl", function ($scope) {
    "use strict";
    $scope.labels = ["0200", "0400", "0600", "0800", "1000", "1200", "1400", 
    "1600", "1800", "2000", "2200", "0000"];
    $scope.series = ['Temperature (°C)'];
    $scope.data = [
    [26.5, 26.8, 26.3, 25.8, 29.4, 30.2, 31.5, 31.0, 28.4, 27.6, 26.3, 25.7]
    ];
    
    $scope.onClick = function (points, evt) {
    console.log(points, evt);
     };
    });
    

    我试着把main,js中的chart函数放到data_controller.js中,并编写了$scope.data.push([mydata.data.substring(6,9)]),但没有任何效果。

    如何调用data_controller.js中的函数并在main.js中使用$scope.data=[]中的数组?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Emin Laletovic    8 年前

    如果您想重用该方法来检索数据,最好将其分离为一个服务。然后,你可以使用你所有的控制器。

    请注意下面的代码只是为了展示实现,如果只是复制粘贴它,它可能不会立即工作。

    //statisticsSvc.js
    angular.module('statisticsApp').service('statisticsService',['$http' function($http){
       var data = [];
       return {
         getStatistics: function(){
           return $http({
                    method : "POST",
                    url : "GatewayAPI.php",
                  })
                  .then(function(response){
                    var mydata,myJSON,myresult,myjava, myobj;
                    var i;
                    var Result; 
                    var chartResultTemp = [];
                    var chartResultph = [];
                    var chartResultHum = [];
                    var resultType = [];
    
    
                    for(i=0; i<72;i++)
                    {
                      //storing data
                      mydata = response.data.data[i];
    
                      //retrieving data
    
                      myobj = mydata.data.substring(3,4);
                      resultType = mydata.data.substring(3, 4);
    
                      if(resultType === "A") {
                        chartResultTemp.push([mydata.data.substring(6,9)]);
                      } else if (resultType ==="B") {
                        chartResultph.push([mydata.data.substring(6, 9)]);   
                      } else {
                        chartResultHum.push([mydata.data.substring(6, 9)]);   
                      };
    
                      return {
                        records: response.data.data,
                        Result: Result,
                        chartResultTemp: chartResultTemp,
                        resultType: resultType,
                        chartResultph: chartResultph,
                        chartResultHum: chartResultHum
                      };
                    }
                  })
                  .catch(function(error){
                    console.log(error);
                    return error;
                  })
         },
                  setData: function(a){ data = a;},
                  getData: function(){ return data;} 
       };
    }]);
    

    然后,您可以在控制器中使用此服务:

        //myCtrl
        var app = angular.module('statisticsApp', [chart.js]).controller('myCtrl',
        function ($scope, $http,statisticsService) {
    
        //your call to service
        statisticsService.getStatistics().then(function(response){
          $scope.records = response.records;
          $scope.test = response.Result;
          $scope.test2 = response.chartResultTemp;
          $scope.test3 = response. resultType;
        }).error(function(error){
          console.log(error);
        });
    
    
        //get data
        $scope.data = statisticsService.getData();
    
    });
    
    //LineCtrl
    var app = angular.module("statisticsApp", ["chart.js"]);
    app.controller("LineCtrl", function ($scope, statisticsService) {
    "use strict";
    $scope.labels = ["0200", "0400", "0600", "0800", "1000", "1200", "1400", 
    "1600", "1800", "2000", "2200", "0000"];
    $scope.series = ['Temperature (°C)'];
    $scope.data = [
    [26.5, 26.8, 26.3, 25.8, 29.4, 30.2, 31.5, 31.0, 28.4, 27.6, 26.3, 25.7]
    ];
    
    //set data
    statisticsService.setData($scope.data);
    
    $scope.onClick = function (points, evt) {
    console.log(points, evt);
     };
    });