为什么我不能推送到 AngularJS 工厂中的数组?

Why can't I push to an array in an AngularJS factory?

我有一个服务设置可以从我的 API 中获取信息并将其附加到一个数组中。但是当我尝试使用 push() 函数时,我不断收到错误消息。

这是工厂:

.factory( 'SurgeryList', function($http, $rootScope) {
    var surgeryListService = {
        days: []
    };

    surgeryListService.getDays = function() {
        return days;
    };

    surgeryListService.nextPage = function() {

        var url = $rootScope.url+'/api/surgeries/day.json?surgery_date='+nextDate+'&access_token='+$rootScope.accessToken+'&callback=JSON_CALLBACK';

        $http.jsonp(url)
            .success(function(response, status, headers, config) {
                days.push(response.day);
            }
        );

        return days;
    };

    return surgeryListService;
})

我收到 push() 的错误消息

TypeError: days.push is not a function

我尝试将天数声明为对象和数组

days: {}
/
days: []

两者都给出相同的错误。

我还注意到,当我将天数声明为数组时,然后使用 console.log(天数)。它在 nextPage() 函数中从一个数组变成一个对象。

我也曾尝试用 concat() 替换 push(),但这也给了我 "not a function" 错误。

如果我使用键添加日期对象,我可以使它工作。

days[response.day.date_string] = response.day;

但我想使用一些 angular 过滤器,当我设置这样的日子时它们无法正常工作。

编辑:

工作代码与 pankajparkar 的回答略有不同。我必须使用临时变量进行推送,然后将其连接到服务变量

var temp = [];
temp.push(response.day);
surgeryListService.days = temp.concat(surgeryListService.days);

您应该使用 surgeryListService.days 而不是 days 因为您在服务 surgeryListService,

中初始化了天数对象

你应该像下面这样重构你的服务,因为有很多错误。

服务

.factory('SurgeryList', function($http, $rootScope) {
    var surgeryListService = {
        days: []
    };

    surgeryListService.getDays = function() {
        return surgeryListService.days;
    };

    surgeryListService.nextPage = function() {

        var url = $rootScope.url + '/api/surgeries/day.json?surgery_date=' + nextDate + '&access_token=' + $rootScope.accessToken + '&callback=JSON_CALLBACK';

        $http.jsonp(url)
            .success(function(response, status, headers, config) {
                surgeryListService.days.push(response.day);
            });

        return surgeryListService.days;
    };

    return surgeryListService;
})

需要surgeryListService.days.push()而不是days.push

这里

$http.jsonp(url)
            .success(function(response, status, headers, config) {
               surgeryListService.days.push()(response.day);
            }
        );