【发布时间】:2014-09-25 17:20:33
【问题描述】:
我正在构建一个系统,该系统根据使用 AngularJS 发送到 API 的日期获取新事件。我目前仍处于 AngularJS 的学习阶段,所以我想知道我缺少什么。
我的问题是,即使数据在页面加载时正确加载,当我第一次单击按钮时,我得到 undefined for $scope.newEvents 即使它已成功从 API 获取数据(我可以在控制台中查看)。
我正在尝试构建一个 JSFiddle,但我无法让整个事情在上面运行。
这里是html输出...
输出...
<ul>
<li ng-repeat="event in events | orderBy:'-event_date' ">
<span >{{event.event_date}},{{event.event_name}}, {{event.event_venue}}, {{event.event_description}} </span>
</li>
</ul>
我的 js 中的 get 请求...
var eventApp = angular.module('eventApp', ['ngRoute']);
eventApp.factory("services", ['$http', function($http) {
var apiBase = 'http://example.net/angular-api/'
var service = {};
service.getEvents = function(latest_date){
return $http.get(apiBase + 'events?latest_date=' + latest_date);
}
return service;
}]);
当页面加载正常时,它会发出成功的请求并更新$scope.events ...
var date = new Date();
$scope.todays_date = date.getUTCFullYear() + '-' +
('00' + (date.getUTCMonth()+1)).slice(-2) + '-' +
('00' + date.getUTCDate()).slice(-2) + ' ' +
('00' + date.getUTCHours()).slice(-2) + ':' +
('00' + date.getUTCMinutes()).slice(-2) + ':' +
('00' + date.getUTCSeconds()).slice(-2);
$scope.events = [{}];
services.getEvents($scope.todays_date).then(function(data){
$scope.events = data.data;
});
但是,当单击加载 ng-click 函数的按钮时,我的数据未定义。我最初认为日期格式有问题,但它成功获取数据的事实让我感到困惑。问题从下面的then开始...
$scope.addFiveNew = function (new_or_old) {
if (new_or_old == 'new') {
$scope.latest_date = $scope.getNewestDate();
services.getEvents($scope.latest_date).then(function(data){
$scope.newEvents = data.data;
});
console.log($scope.newEvents);
// update the list (this is currently failing on first click)
angular.forEach($scope.newEvents,function(item) {
$scope.events.push(item);
});
}
控制器中的这个函数创建要发送的日期...
$scope.getNewestDate = function() {
var sortedArray = $filter('orderBy')($scope.events, 'event_date');
var NewestDate = sortedArray[sortedArray.length - 1].event_date;
return NewestDate;
};
这是一些数据的示例......
{
"event_id":"1",
"event_name":"Event 1",
"event_date":"2014-09-26 00:00:00",
"event_venue":"Limerick",
"event_description":"stuff"
}
【问题讨论】:
-
把
forEach放在回调里面($scope.newEvents = data.data;之后)
标签: javascript angularjs