2016-03-23 3 views
0

Я пытаюсь получить данные из таблицы в массив. Я уже сохранил данные в переменных javascript. Но теперь мне нужны эти varriables для хранения в качестве объекта в моем массиве. Вот мой код:AngularJS: как я могу получить данные в объект и массив?

this.json = function(){ 
     jQuery.getJSON("http://cors.io/?u=https://spreadsheets.google.com/feeds/list/1l4XTKaLZihj5WDRuZJE5Y7RQ7Cr7SD_-tH0ctwhizWc/od6/public/values?alt=json").success(function(data) { 
      console.log(data.feed.entry); 
      //try 
      for (var i = 0; i < data.feed.entry.length; i++) { 

       var id = data.feed.entry[i].gsx$id.$t; 
       var name = data.feed.entry[i].gsx$name.$t; 
       var price = data.feed.entry[i].gsx$price.$t; 
       var notcompatiblewith =  data.feed.entry[i].gsx$notcompatiblewith.$t; 

       this.parts[i] = {"id": id, "name": name, "price": price, "comp": notcompatiblewith, "canAdd": true, "added": false};  
      }; 
     }); 
    }; 

я вызвать функцию this.json в моем HTML с нг-инициализации = «myctrl.json()», и называет это прекрасно. в моей консоли на инспектировать элемент я получаю сообщение об ошибке: «неперехваченным TypeError: Не удается установить свойство„0“неопределенных»

мой массив должен выглядеть следующим образом, если он инициализируется хорошо:

{ 
id: 1, 
name: 'vitamine A', 
price: 3, 
canAdd: true, 
added: false, 
comp: [2, 5] 
}, 
{ 
id: 2, 
name: 'vitamine B', 
price: 5, 
canAdd: true, 
added: false, 
comp: [1, 3] 
}, 
{ 
id: 3, 
name: 'vitamine C', 
price: 2, 
canAdd: true, 
added: false, 
comp: [2] 
}, 
{ 
id: 4, 
name: 'Opium', 
price: 20.95, 
canAdd: true, 
added: false, 
comp: [] 
}, 
{ 
id: 5, 
name: 'steroids', 
price: 12.5, 
canAdd: true, 
added: false, 
comp: [1] 
} 

Edit: части массива в инициализирован под мой контроллер, как этот

var parts = []; 

и объявлен в мой контроллер, как

this.parts = parts; 

ответ

0

Вы должны инициализировать this.parts переменные с пустым Array объекта:

this.json = function(){ 
    jQuery.getJSON("http://cors.io/?u=https://spreadsheets.google.com/feeds/list/1l4XTKaLZihj5WDRuZJE5Y7RQ7Cr7SD_-tH0ctwhizWc/od6/public/values?alt=json").success(function(data) { 
     console.log(data.feed.entry); 
     this.parts = []; // <-- this line was added 
     // skipped 
    }); 
}; 

Также вы можете использовать push методы Массива вместо this.parts[i] = ...:

this.parts.push({"id": id, ... }); 
+0

Спасибо, это сработало !!!! –

1

При вызове this это относится к JQuery. Для этого parts не существует.

Кроме того, вы делаете это неправильно. Вы должны использовать сервис для него, а в сервисе есть угловой $http для обработки запросов ajax.

По-вашему, вы не используете угловой правильно.

Читайте здесь: https://docs.angularjs.org/guide/services

0

Вы пробовали:

this.parts[i].push({"id": id, "name": name, "price": price, "comp": notcompatiblewith, "canAdd": true, "added": false}); 

Потому что:

this.parts[i] = {"id": id, "name": name, "price": price, "comp": notcompatiblewith, "canAdd": true, "added": false}; 

Это будет в конечном итоге назначая только одно значение для array.Everytime массив будет получать upadated из последних значение и удаление предыдущего значения.

+0

да, первый комментарий сказал мне сделать это таким образом, но я ушел из [i], и он работал просто отлично –

+0

Надеюсь, что так. Он должен работать. – Ved