2013-08-29 2 views
0

Folks Я установки моего приложения, как показано ниже:Угловые временные ресурсы выпуск

var myApp = angular.module('app', []); 

myApp.factory('MotorList', ['$resource', function($resource) { 
    return $resource(baseURL + 'MotorList.json', {}, {}); 
}]); 

myApp.factory('MotorDataManager', function(MotorList) { 
var List; 

MotorList.query().$then(function(value){ 
    List = value.data; 
}) 

return { 
    getFullList: function() { 
    return List; 
    } 
    anotherFunction: function { ... } 
} 

}); 

myApp.controller('MainCtrl', function($scope,MotorDataManager){ 
    $scope.tableData = MotorDataManager.getFullList(); 
}) 

В моем переднем конце у меня есть нг-повторение, что петли через $ scope.tableData. Однако проблема, с которой я сталкиваюсь, заключается в том, что $ scope.tableData никогда не отображается. Ресурс работает нормально. Он возвращает данные, однако я считаю, что это проблема с синхронизацией, но я не уверен, как ее решить.

+0

Эй, мое понимание функции углов .query() вернет индекс. Есть ли особая причина, по которой вам приходилось писать свой собственный метод? –

+0

Запрос Angular возвращает объект ресурса – runtimeZero

+0

также, не могли бы вы также указать свой шаблон html? –

ответ

0

Конечно, это вопрос времени. Когда вы вызываете MotorDataManager.getFullList(), вы получаете undefined, потому что обратный вызов, который его устанавливает, никогда не устанавливается. Таким образом, $scope.tableData не определено.

Вам нужно $scope.tableData, чтобы иметь ссылку на то, что меняется. Вот один из способов сделать это:

myApp.factory('MotorDataManager', function(MotorList) { 
    var list = []; 

    MotorList.query().$then(function(value){ 
    angular.forEach(value, function(item) { 
     list.push(item); 
    }); 
    }); 

    return { 
    getFullList: function() { 
     return list; 
    } 
    } 
}); 

myApp.controller('MainCtrl', function($scope,MotorDataManager){ 
    $scope.tableData = MotorDataManager.getFullList(); 
}); 

В этом примере, вы теперь возвращая массив, так, чтобы начать с, $scope.tableData будет пустой массив. Но это будет нормально, потому что теперь у вас есть ссылка на что-то. Когда возвращается $resource, он заполнит массив (который является той же ссылкой), чтобы ваш контроллер теперь имел заполненный массив. Угловая привязка данных и логика пищеварения должны заботиться обо всем остальном.

+0

Это не сработает. Он возвращает следующую ошибку: TypeError: Array.prototype.push, вызываемый по null или undefined – runtimeZero

+0

Извините ... проверьте мое редактирование вызова 'angleular.forEach' , В любом случае, эта функция должна просто скопировать значения в массив 'list', а не перезаписывать ее. –

+0

Проблема синхронизации не решена этим – runtimeZero

Смежные вопросы