#angularjs #events #click #directive #programmatically
#angularjs #Мероприятия #нажмите #директива #программно
Вопрос:
Я создал директиву для загрузки аудиофайла. По щелчку тега директивы я извлекаю данные в кодировке base64 с сервера и устанавливаю атрибут ‘href’ тега привязки (это шаблон директивы) для выбранных данных. Затем я пытаюсь программно щелкнуть тег «a», чтобы пользователю можно было отобразить всплывающее окно загрузки файла. Проблема здесь в том, что при запуске события ‘click’ оно ничего не делает, но при нажатии вручную во второй раз оно работает.
Я внедрил код скрипки. Любая помощь действительно ценится. Ниже приведен код директивы:
angular.module('myTestApp', [])
.directive('webDownloader', downloadFn);
downloadFn.$inject = ['$timeout'];
function downloadFn($timeout) {
function downloadLinkFn(scope, element) {
scope.fileName = scope.fileName || 'test-file';
scope.populateData = function() {
if (scope.dataURL) {
} else {
scope.webProvider()
.then(function (response) {
scope.dataURL =
'data:audio/ogg;base64,' response;
$timeout(function() {
angular.element(element).
find('a').triggerHandler('click');
}, 0);
});
}
};
// Return the object.
return {
template: '<a data-ng-href="{{dataURL}}" download="{{fileName}}" data-ng-click="populateData()" data-ng-transclude></a>',
transclude: true,
restrict: 'A',
scope: {
fileName: '@',
webProvider: 'amp;'
},
link: downloadLinkFn
};
}
Ответ №1:
Я все еще не уверен, но если я angular.element(element).find('a').triggerHandler('click');
заменю angular.element(element).find('a')[0].click();
его, это сработает.
Обновление: triggerHandler('click')
не работает, если href
нет present.So , если я установлю значение по умолчанию как scope.dataURL = '#'
, приведенный выше код будет работать.