如何将数组从服务函数传递到控制器(AngularJs)中的范围?

时间:2015-04-21 05:30:25

标签: javascript angularjs

我有一个角度服务如下所示:

    .service('shareDataService', function() {
            var myXi = [];
            var myYi = [];

            var addXi = function(newObj) {
                myXi = newObj;
            }

            var addYi = function(newObj) {
                myYi = newObj;
            }

            var getPlot = function() {
                var a = [];

                for (var i = 0; i < myXi.length; i++) {
                    a.push([myXi[i], myYi[i]]);
                }

                return a;
            }

            return {
                addXi: addXi,
                addYi: addYi,
                getPlot: getPlot
            };
    });

我有角度控制器:

    .controller('plotController', function($scope, shareDataService) {
            $scope.getYo = function() {
                    return shareDataService.getPlot();
            };
            $scope.lineChartData = [
                    $scope.getYo()
            ];
    });

我需要将$ scope.getYo中的值发送到$ scope.lineChartData(它将是和数组)。我怎样才能做到这一点?我已经尝试过了,但是如果我在HTML中调用$ scope.lineChartData,我什么也得不到。 我需要的数据是

    [
            [
                    [2,0],
                    [3,1],
                    [5,4]
            ]
    ];

更新:

请参阅http://laravel.io/bin/6LVej中的完整说明。感谢

4 个答案:

答案 0 :(得分:8)

我们知道工厂和服务基本上用于共享数据。但两者都有不同的用途和含义。基本的区别是Factory应该总是返回Object,Service应该返回Function(JS中的构造函数)。以下是可能对您的案例有所帮助的代码段。

    var app = angular.module('plunker', []);

app.service('arrayService', function() {
  return function() {
    this.getArray = function() {
      return [1, 2, 3, 4, 5];
    }
  }
})
app.factory('arrayFactory', function() {
  return {
    getArray : function() {
      return [9,8,7,6,5];
    }
  }
})
app.controller('MainCtrl', ['$scope','arrayService','arrayFactory',
  function($scope, arrayService,arrayFactory) {
    var ary = new arrayService();
    $scope.serviceArrayObject = ary.getArray();
     $scope.factoryArrayObject = arrayFactory.getArray()

  }
]);

Here is the plunker for basic difference  我们如何使用服务和工厂

答案 1 :(得分:2)

尝试以下代码

.controller('plotController', function($scope, shareDataService) {

        $scope.lineChartData =shareDataService.getPlot();
});

答案 2 :(得分:0)

由于getYo返回一个数组,您可以直接将其返回值分配给lineChartData

$scope.lineChartData = $scope.getYo();

答案 3 :(得分:0)

shareDataService.getPlot();返回数组对象,因此您可以直接将其调用$scope.lineChartData。 试试这个

 .controller('plotController', function($scope, shareDataService) {             
            $scope.lineChartData = shareDataService.getPlot();
    });

您不需要编写此代码

        $scope.getYo = function() {
                return shareDataService.getPlot();
        };