如何在Angular上的文件输入上触发'click'事件?

AZ.*_*AZ. 8 angularjs

这是以下观点jade:

button#save-csv-btn(ng-click="click()") Export CSV
input#save-csv(style="display:none", type="file", onchange="angular.element(this).scope().saveCSVFileChanged(this)")
Run Code Online (Sandbox Code Playgroud)

JS:

$scope.click = ->
    # $('#save-csv').trigger('click')
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

Error: $apply already in progress
Run Code Online (Sandbox Code Playgroud)

mcf*_*edr 11

我改变了$scope.click函数来触发输入点击setTimeout.这让第一次$apply完成,然后将触发另一次.

$scope.click = function() {
    setTimeout(function() {
        inputEl.click();
    }, 0);
}
Run Code Online (Sandbox Code Playgroud)

请注意,我使用setTimeout,而不是$timeout.$timeout也会在一个$apply街区内.


AZ.*_*AZ. 3

这个想法是使用按钮来“模拟”文件输入;我使用http://gregpike.net/demos/bootstrap-file-input/demo.html实现了这一点。

input#save-csv(type="file", title="Export to CSV", onchange="angular.element(this).scope().saveCSVFileChanged(this)") 
Run Code Online (Sandbox Code Playgroud)