Я новичок в AngularJS. Мне нужно сделать асинхронный внешний вызов (некоторый API) во время изменения маршрута и отобразить новое содержимое страницы, когда этот вызов возвращает какой-то действительный объект JS, скажем var MySpecialObject
.Решить, когда обещание готово
Я бы отложил отображение нового вида до 3 секунд, но пока объект не будет готов. Поэтому, если я получаю объект за меньшее время - скорее, - я бы хотел показать новый контент немедленно.
1.Where - лучший способ инициировать вызов?
2. Как я могу отобразить новый вид, как только я получу этот объект?
Я пробовал использовать маршрут resolve
. Ниже код - это то, с чего я начал успешно, но я не думаю, что он хорошо работает с решением «обещания». Как отобразить новое представление, как только объект возвращается на страницу? Другими словами, я хочу отменить таймаут, когда объект готов.
app.controller('PageCtrl', function($scope) {
$scope.$on('$routeChangeStart', function(next, current) {
//API call here
});
app.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when("/", {templateUrl: "partials/home.html",
controller: "PageCtrl",
resolve:{
delay: function ($q, $timeout) {
var defer = $q.defer();
$timeout(function() {
if(typeof MySpecialObject !== 'undefined')
defer.resolve('Resolve');
}, 3000);
return defer.promise;
}
}
})
Я не слишком ясно, о том, как решить свое обещание. В моем случае решение включает в себя вызов и проверку действительного существования объекта JS. Где я могу подключить эту функцию в режиме «Угловой»? – Vad
Куда вы звоните? У вас есть внешний сервис REST? Возможно, угловой сервис? – GPicazo
Спасибо. Я не могу контролировать этот звонок. Я должен вызвать функцию, которая вызывает вызов Ajax, и единственная проверка успеха - это существование какого-либо объекта JS из ответа. – Vad