2016-10-11 5 views
1

Я создал директиву для загрузки аудиофайла. При щелчке тега директивы я извлекаю данные с кодировкой base64 с сервера и устанавливаю атрибут «href» тега привязки (это шаблон директивы) к извлеченным данным. Затем я пытаюсь программным образом щелкнуть тег 'a', чтобы всплывающее окно загрузки файла отображалось пользователю. Проблема здесь в том, что при запуске события «щелчок» он ничего не делает, кроме как при первом нажатии его вручную.AngularJS триггерное событие щелчка программно на теге привязки из директивы

Я вложил fiddle code. Любая помощь действительно ценится. Ниже приведен код директивы:

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: '&' 
}, 
link: downloadLinkFn 
    }; 
} 

ответ

1

Я все еще не уверен, но если я заменю angular.element(element).find('a').triggerHandler('click'); с angular.element(element).find('a')[0].click(); это работает.

Update: triggerHandler('click') не работает, если href не present.So, если установить значение по умолчанию, как scope.dataURL = '#', приведенный выше код будет работать.