为什么我不能推送到 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);
}
);
我有一个服务设置可以从我的 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);
}
);