2016-10-11 4 views
1

私はオーディオファイルをダウンロードする命令を作成しました。ディレクティブタグをクリックすると、サーバーから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 
    }; 
} 

答えて

1

: は、以下のディレクティブコードです。

更新: triggerHandler('click')hrefがpresent.Soでない場合、私はscope.dataURL = '#'としてデフォルト値を設定している場合、上記のコードは動作します動作しません。

関連する問題