AngularJS программно запускает событие щелчка по тегу привязки из директивы

#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 = '#' , приведенный выше код будет работать.