从我的控制器中的angular.factory检索数组

时间:2016-08-29 18:41:05

标签: javascript angularjs arrays

这是我第一次实施工厂,它看起来像是一个非常小的东西,但我似乎无法确定它可能是什么。

我的工厂代码是:

angular.module('dashboardApp').factory('randomNumberService', function($http) {
var num, min, max, col, base, format, md, myData;
var numbersArray = [];
var newArrayTwo = [
    [],
    []
];
var getRandom = {
    myNumbers: []
};
getRandom.numbers = function() {

    $http({
        method: 'GET',
        url: 'https://www.random.org/integers/',
        params: { num: 14, min: 9, max: 80, col: 1, base: 10, format: 'plain', md: 'new' }
    }).success(function(response, data, status, config) {
        numbersArray = response.split(response.charAt(2));
        console.log(numbersArray[0]);
        angular.copy(numbersArray, getRandom.myNumbers);
    }).error(function(data, status) {
        //error code here
    });
}
return getRandom;

});

我从我的控制器调用它:

    randomNumberService.numbers();
var myData = randomNumberService.myNumbers;

基本上当我在console.log中的数组(myData)时,它会显示我必须展开的括号以查看数组。当我将鼠标悬停在它上面时,它有点我说"左边的对象值在记录时被快照了#34;当我尝试console.log myData [0]时,它表示未定义。当它向我显示没有索引的整个数组时,它怎么能被定义?

2 个答案:

答案 0 :(得分:0)

看起来你做得很好。

如果要在页面上查看结果,请先将值放在范围

$scope.myData = randomNumberService.myNumbers;

在html中:

<pre>{{myData | json}}</pre>

查看页面上显示的内容

答案 1 :(得分:0)

你可以在工厂做得更好: 例如,使用$ q:

angular.module('dashboardApp')
  .factory('randomNumberService', function($http, $q) {
    var num, min, max, col, base, format, md, myData;
    var numbersArray = [];
    var newArrayTwo = [[],[]];

    return { 
      getNumbers: function(){
            var defer = $q.defer();
            $http({
                    method: 'GET',
                    url: 'https://www.random.org/integers/',
                    params: { num: 14, min: 9, max: 80, col: 1, base: 10, format: 'plain', md: 'new' }
                 })
             .success(function(response, data, status, config) {
                    numbersArray = response.split(response.charAt(2));
                    defer.resolve(numbersArray);
                }).error(function(data, status) {
                    defer.reject();
                });

             return defer.promise;
      }
    }

在你的控制器中:

randomNumberService.getNumbers()
 .then( function(data){
   $scope.myData = data;
 });