私はオーディオファイルをダウンロードする命令を作成しました。ディレクティブタグをクリックすると、サーバーからbase64でエンコードされたデータを取得し、取得したデータにアンカータグ(これはディレクティブのテンプレート)の 'href'属性を設定します。次に、ファイルダウンロードポップアップをユーザーに表示できるように、プログラムで「a」タグをクリックしようとしています。ここで問題となるのは、 'クリック'イベントがトリガされたときに、何もしませんが、手動でクリックしたときに2度目に機能することです。指令内のアンカータグのAngularJSトリガークリックイベント
私はfiddle codeを埋め込んでいます。どんな助けでも本当に感謝しています。私はまだわからないが、私は angular.element(element).find('a')[0].click();
で angular.element(element).find('a').triggerHandler('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: '&'
},
link: downloadLinkFn
};
}