Я пытаюсь создать страницу пользователя, где он показывает основные данные, данные, адрес и т. Д. Когда я делаю первую загрузку, она не отображается на пока я не изменю страницу и не вернусь на страницу пользователя. Это проблема из-за обещания вернуться после того, как я уже пошел на эту страницу.Значение контроллера AngularJs не обновляется после разрешения на заводе
я не могу (не хочу) использовать эти данные будут загружены во время resolve
на stateChange
, потому что это делает приложение чувствует замораживания, так как это будет только изменить экран после того, как все данные resolved
, и если это занимает некоторое время, кажется, что страница не работает.
Я также попытался с помощью $scope.$digest()
(на controller
) и $rootScope.$apply()
на factory
, но обе ситуации дают мне ошибку digest running
.
Использование .then()
не является вариантом (если только не существует надлежащего способа), потому что, если я вернусь на эту страницу после первой загрузки, будут ошибки.
Путь я загружаю это от parent
(реферата) controller
и хранения этих значений в factory
, что-то вроде этого:
//Parent Controller
function parentController(requestFactory, storeFactory, $q) {
var
user = storeFactory.userGet(),
data = storeFactory.dataGet()
[...more load...];
if(!user || !data ...) {
var promises = {
user: requestFactory.get('userGet'),
data: requestFactory.get('dataGet'),
[...more requests...]
};
return $q.all(promises).then(function(resolve){
storeFactory.userAdd(resolve.user);
storeFactory.dataAdd(resolve.data);
[...more update...]
});
}
}
//Factory
function storeFactory() {
var
data = null,
user = null,
address = null,
endereco = null;
var service = {
userGet: _userGet,
userAdd: _userAdd,
[...more definitions...]
};
return service;
function _userGet() {
return user;
}
function _userAdd(data) {
return user = data;
}
[...more functions...]
}
// child Controller 01
function child1Controller(storeFactory) {
vm.user = storeFactory.userGet();
}
// child Controller 02
function child2Controller(storeFactory) {
vm.address = storeFactory.addressGet();
}
Я также нужно загрузить все эти данные о начале, потому что есть зависит от данных, например, адрес зависит от пользователя, и т.д ..
Итак, если доступ пользователю страницу > адрес он не показывает ничего на экран, но если я перейду на другую страницу и вернусь, все будет выглядеть так, как должно быть показано.
Есть ли способ решить эту проблему? Автоматическое обновление данных?
Если вы используете ui-router, вы можете выполнить обещания до того, как произойдет переход состояния, поэтому данные будут там. В противном случае просто подождите, пока обещания будут разрешаться в контроллере и обновить пользовательский интерфейс соответственно. – reptilicus
@reptilicus. Но я не хочу использовать его в решении ui-router, потому что он чувствует, что страница не работает, так как она изменится только после данные разрешаются, что может занять некоторое время. При использовании разрешения на контроллере у меня возникают проблемы с обновлением ui после решения. – celsomtrindade
Хорошо, если вы ждете множества обещаний решить, тогда да, это займет некоторое время. Либо разбить обещания на группы, которые могут быть использованы для обновления пользовательского интерфейса или найти способ сделать меньше запросов? – reptilicus