Я пытаюсь извлечь данные из внешнего файла JSON и отобразить его для просмотра пользователем. Благодаря различным действиям пользователь сможет изменить данные, возвращаемые из файла JSON, не внося эти изменения в файл (в этом примере, увеличивая значения на единицу, нажав на div). Я создал службу обещаний, которая успешно извлекает данные и отображает их. Я даже могу получить его, чтобы данные могли быть изменены в отдельных контроллерах.AngularJS Promises: Положите обещание на Factory, чтобы он был доступен по всему миру и * редактировался *
Здесь я застрял: Я не могу найти способ внести какие-либо изменения в данные в PromiseService, поэтому изменения не могут распространяться по всему миру. Как я могу сделать так, чтобы любое изменение данных обещаний на уровне контроллера отражалось в PromiseService и, таким образом, отражалось на любых привязках данных в приложении? Я новичок в обещаниях, поэтому я открыт совершенно по-другому.
HTML:
<body ng-app="pageApp" ng-controller="pageCtrl" nd-model="items">
{{items}}
<div class="button" ng-controller="buttonCtrl" ng-click="incrementValues()">
Click to increment:
<br>{{items}}
</div>
</body>
PromiseService:
pageApp.factory('PromiseService', function($http) {
var getPromise = function() {
return $http.get('items.json').then(function(response) {
return response.data;
});
};
return {
getPromise: getPromise
};
});
Кнопка контроллера (Page Controller в Plunker):
pageApp.controller('buttonCtrl', function($scope, PromiseService) {
$scope.incrementValues = function()
{
PromiseService.getPromise().then(function(data) {
$scope.items = data;
for(var i = 0; i < data.items.length; i++)
{
data.items[i]['value']++;
}
}).catch(function() {
});
};
});
incrementValu Функция es успешно работает в первый раз, но каждый последовательный щелчок перетягивает обещание и сбрасывает данные. Подводя итог: как отразить приращенные значения в PromiseService, в отличие от локальных переменных?
Что вам нужно, чтобы получить данные, как только это будет сделано, обновите данные в разных контроллерах без повторного получения данных? –
@ ManuelObregozo - это правильно. – ctrlawkdel