Наверное, это так же просто, как я думаю, но я не могу найти ответ на свой вопрос в Интернете, поэтому, надеюсь, вы, ребята, знаете ответ, просто взглянув на небольшой фрагмент моего кода.Устранение должно содержать все обещания даже от контроллера?
Проблема: Я использую маршрутизатор пользовательского интерфейса в Угловом, и он загружает шаблон, прежде чем все данные будут загружены. Таким образом, все поля ввода получают правильные значения ПОСЛЕ того, как шаблон уже загружен. Таким образом, поля ввода пустые для второй или два ....
Я думаю, что моя решимость не так, как должно быть:
Так что мой UI-маршрутизатор код выглядит примерно так (проверить объект разрешаемого) :
$stateProvider.state('teststate', {
url: '/test/',
templateUrl: 'app/page/template.html',
controller: 'testCtrl',
resolve: {
access: ["Access", function(Access) { return Access.isAuthenticated(); }],
UserProfile: 'UserProfile'
}
});
Теперь контроллер содержит обещание, чтобы получить некоторые данные из API URL:
function TestCtrl($scope, $state, $stateParams, TestService) {
TestService.get($stateParams.id).then(function(response) {
$scope.data = response;
});
}
Теперь сервис (который подключается к API) должен вернуть обещание в Contro Меллер:
TestService.factory('TestService', ['Restangular', function(Restangular) {
var factory = {};
factory.get = function(id) {
return Restangular.one('api/test', id).get();
}
return factory;
}]);
Теперь, может быть проблемой, что из-за TestService.get()
(который подключается к API) в контроллере, запускается на выполнении НЕ перед загрузкой шаблона, потому что это не внутри resolve
объекта? Итак, маршрутизатор пользовательского интерфейса не разрешает вызов API? Мне просто интересно, или я должен переместить все методы, которые вызывают вызовы API, для объекта разрешения каждого стата внутри $stateProvider
.
Я мог бы запустить много тестов, но если кто-то прямо знает ответ, просто глядя на этот вопрос, он мне очень помогает.
Спасибо! Полезно знать :) –