2016-03-15 2 views
1

Привет У меня есть данные в LocalStorage в JSON строку:AngularJS и JSON возвращает неопределенное

[ 
    {"Date":"28/04/2016","Time":"08:00","Title":"Title 1"}, 
    {"Date":"28/04/2016","Time":"08:30","Title":"Title 2"} 
] 

И мой module.factory выглядит следующим образом:

module.factory('$schedule', function() { 
     var schedule = {}; 

     var result = JSON.parse(localStorage.getItem('myAgenda')); 

     schedule.items = [{ 
       title: result.Title, 
       date: result.Date, 
       time: result.Time   
     }]; 
     return schedule; 
    }); 

Когда я пытаюсь получить данные возвращаются undefined. Когда я пытаюсь получить конкретный объект, например:

console.log(result[0].Title); 

Он отлично работает и отображает только первый элемент. Наверное, я пропустил каждое определение, но не знаю, как это сделать. Пожалуйста, помогите мне получить все результаты в моем schedule.items.

И я передаю результат как элементы в:

module.controller('ScheduleController', function($scope, $schedule) {  
    $scope.items = $schedule.items; 
}); 

Большое спасибо.

+0

Как вы пытаетесь получить данные? –

+0

Правильно ли этот формат? '[{« Дата »:« 28/04/2016 »,« Время »:« 08:00 »,« Название »:« Название 1 »}, {« Дата »:« 28/04/2016 »,« Время ":" 08:30 "," Title ":" Title 2 "]' или вам не хватает}? – Konkko

+0

Привет @LukaJacobowitz Я использую контроллер: module.controller ('ScheduleController', function ($ scope, $ schedule) { $ scope.items = $ schedule.items; }); – qqruza

ответ

1

Вы пытаетесь получить доступ к полям в массиве без упоминания элемента массива, к которому вы хотите получить доступ. Если вы хотите перечислить все записи в повестке дня и добавить их в свой массив, это должно выглядеть примерно так:

module.factory('$schedule', function() { 
    var schedule = []; 

    var result = JSON.parse(localStorage.getItem('myAgenda')); 

    result.forEach(function (date) { 
     schedule.push({ 
      title: date.Title, 
      date: date.Date, 
      time: date.Time 
     }) 
    }) 

    return schedule; 
}); 
+0

У меня есть ошибка: не могу прочитать свойство «push» undefined – qqruza

+0

Если вы посмотрите на строку кода «var schedule = {};» я изменил его на "var schedule = [];" который указывает пустой массив вместо пустого объекта. Таким образом, вы сможете использовать push! – Chris

+0

Я сделал это изменение, но все равно получаю ошибку TypeError: Не могу прочитать свойство «push» неопределенного указания на эту строку: schedule.items.push ({ – qqruza

0

Не знакомы с module.factory, но результат выглядит как массив объектов, и вы получаете доступ к нему, как к одному объекту при создании sched.items.

Возможно, вам придется перебирать массив и создавать элемент для каждого объекта в результате.

1

Вы должны использовать .map над массивом, а также добавить отсутствующий } в свой последний элемент массива.

var schedule = []; 
//assuming result returns an array. 
schedule = result.map(function(value){ 
    return { 
     title: value.Title, 
     date: value.Date, 
     time: value.Time 
    }; 
}) 
Смежные вопросы