Мне нужно обновить href ссылки асинхронно. Скажем, у меня есть этот HTML:Угловое асинхронное определение href по ссылке
<a ng-href="{{url}}" ng-click="resolveUrl()" target="_blank">click me</a>
И этот угловой регулятор:
app.controller('MainCtrl', function($scope, $q) {
$scope.url = '#';
$scope.resolveUrl = function() {
async().then(function(resolvedUrl){
$scope.url = resolvedUrl;
});
}
function async() {
var deffered = $q.defer();
setTimeout(function() {
deffered.resolve('http://www.google.com');
}, 1000)
return deffered.promise;
}
});
И мне нужна ссылка, чтобы перейти к google.com даже в первый раз. Как синхронизировать асинхронный вызов или как назначить URL-адрес, чтобы асинхронная функция была решена?
Отредактировано:
Как @Konstantin Красс отметил, я мог бы использовать метод window.open(). Но я не могу использовать его асинхронно, потому что всплывающие окна браузера будут блокировать новое окно. Поэтому я попытался открыть другое окно на клике (которое не заблокировано), а затем после того, как обещание будет разрешено, я обновляю URL-адрес открытого окна на google.com. Отредактированный plunker - here. К сожалению, это не работает на iPad. На iPad URL страницы не обновляется, потому что на iPad вкладки не могут общаться друг с другом. Любые идеи?
, так что вы хотите сгенерировать URL-адрес? –
Ваш плункер работает правильно. Он разрешает одну секунду после нажатия. Поэтому, если вы хотите перейти в Google в первый раз, а затем разрешить другой URL-адрес, просто измените $ scope.url = www.google.com и асинхронную функцию на новую. http://plnkr.co/edit/SSnKwHKpoWCqbhISm2iq?p=preview –
@KonstantinKrass да. Проблема в том, что мне нужно обрабатывать некоторые вычисления (генерируя blob pdf), а затем назначая URL-адрес blob на ссылку , чтобы пользователь мог загрузить ее на новой вкладке. – daerin