До сих пор у меня нет проблемы с настройкой модели AngularJS в моем приложении Rails и предоставлением ей данных для доступа к интерфейсу. Я даже настроил его на заполнение данными из запроса AJAX, используя $http
. Однако мне нужна эта модель, чтобы содержать данные нескольких вызовов $http
. Вот код, который я получил до сих пор:Как добавить дополнительные данные в модель AngularJS?
function DropboxCtrl($scope, $http) {
var $infiniteLoader = $(".infiniteLoader");
var theUIDS = $infiniteLoader.attr('data-dropbox-uids').split(',');
if($infiniteLoader.attr('data-dropbox-uids') != "") {
var theData = {};
$.each(theUIDS, function(key) {
$http({ url: '/dropbox/files/get', method: 'GET', params: { uid: theUIDS[key] }}).success(function(data) {
theData = data;
});
});
$scope.dropboxes = theData;
}
}
У меня есть метод, называемый DropboxCtrl
, который будет начать получать все UID о том, что мне нужно вызвать запрос GET на. Я прокручиваю каждый из них, а затем добавляю data
в theData
, который является объектом Javascript. После каждого из них я делаю модель dropboxes равной значению theData
. Current У меня есть метод, который абсолютно ничего не возвращает и никаких ошибок Javascript. Я уверен, что мой URL работает полностью и на самом деле получить код работает только с одной просьбой AJAX, как, например:
$.each(theUIDS, function(key) {
$http({ url: '/dropbox/files/get', method: 'GET', params: { uid: theUIDS[key] }}).success(function(data) {
$scope.dropboxes = data;
});
});
Однако ... что блок кода возвращает только последний вызов AJAX, так как остальные будут перезаписаны. Возможно, то, что мне не хватает, - это просто неправильный Javascript, однако, возможно, то, что мне не хватает, - это просто непонимание «углового пути» вещей. Я учусь в Javascript и jQuery, но очень новичок в Angular. Любая помощь?
Простите мое невежество, я немного новичок в Angular (и никогда не использовал UnderscoreJS), не могли бы вы дать мне немного контекста? Я не совсем понимаю ваш ответ. – cereallarceny
Все, что я пытаюсь сказать, это то, что вам нужно сопоставить свои ответы с соответствующим запросом. Поскольку вы выполняете более одного асинхронного вызова, и порядок ответа не гарантируется, вам нужно будет найти способ вернуть ответ обратно в соответствующий элемент запроса в коллекции. Underscore - это просто библиотека javascript, которая предоставляет полезные функции для поиска, фильтрации и т. Д. В коллекциях и массивах. Вам действительно не нужно его использовать, это просто полезно. – Ketan
Важно помнить 1. Инициализируйте коллекцию объектов, которые будут иметь ваш uid как свойство, прежде чем совершать какие-либо вызовы. 2. В пределах цикла $ each выше, когда вы получите ответ, найдите элемент в этой коллекции на основе uid и затем присоедините ответ к этому элементу в свойстве data. 3. Когда вы получите ответы на все ответы, у вас будет коллекция объектов с uid и данными как 2 свойства. – Ketan