На основе this thread я реализовал следующие (с использованием Restangular):Совместное использование restangular ресурсов между контроллерами
app.factory('Account', function(Restangular) {
var _account;
return {
get: function(id, success, failure) {
// If we've already retrieved an account, return that
if (angular.isDefined(_account)) {
console.log('local');
success(_account);
// Otherwise request the resource and store it for subsequent requests
} else {
console.log('server');
Restangular.one('accounts', id).get().then(
// Success
function(account) {
_account = account;
success(_account);
},
// Failure
function(response) {
if (angular.isDefined(failure)) {
failure(response);
}
}
);
}
}
}
});
Я использую его, как это из моих контроллеров:
Account.get(1, function(account) {
$scope.account = account;
});
Проблема заключается в том, что, поскольку вызовы являются asyc, все вызовы проверяют _account и обнаруживают, что он является нулевым, и поэтому делают вызов сервера, тогда я получаю a) несколько вызовов сервера для одной и той же вещи и b) несвязанные модели.
Если я изменить код, чтобы вернуть «обещание» немедленно, я нахожу, что я не могу редактировать любые текстовые поля, которые я связываясь с нг-модель ..
Есть ли способ обойти это? Я делаю что-то неправильно? насколько я могу сказать, что исходный поток должен страдать той же проблемой ..?
Если я верну обещание? немедленно: _account = Restangular.one ('accounts', id) .get(); успех (_account); Пользовательский интерфейс отображает правильные данные из ресурса, а любые запросы после первого используют локальный объект, но если у меня есть это под двумя контроллерами: Если я попытаюсь отредактировать любой из них, ни одно из моих нажатий клавиш не появится? – matthewrk
Я думаю, что это проблема: https://github.com/angular/angular.js/issues/1827 – matthewrk