我有一个服务设置来从我的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: {}
/
days: []
都会出现同样的错误。
我还注意到,当我将days声明为数组时,请使用console.log(days)。它从数组变为nextPage()函数中的对象。
我也尝试用concat()替换push(),但这也给了我“not a function”错误。
如果我使用键添加日期对象,我可以使用它。
days[response.day.date_string] = response.day;
但我想使用一些角度过滤器,当我设置这样的日子时,它们无法正常工作。
编辑:
工作代码与pankajparkar的回答略有不同。我不得不使用temp变量进行推送,然后将其连接到服务变量
var temp = [];
temp.push(response.day);
surgeryListService.days = temp.concat(surgeryListService.days);
答案 0 :(得分:4)
您应该使用surgeryListService.days
而不是days
,因为您在服务surgeryListService
内初始化了days对象,
您应该像以下一样重构您的服务,因为有很多错误。
<强>服务强>
.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;
})
答案 1 :(得分:2)
它必须是surgeryListService.days.push()
而不是days.push
这里
$http.jsonp(url)
.success(function(response, status, headers, config) {
surgeryListService.days.push()(response.day);
}
);