Ich versuche, ein Klickereignis auf eine Dateieingabe in AngularJS zu emulieren. Ich habe working jQuery examples gesehen, aber ich möchte jQuery nicht verwenden.Trigger Eingabedatei klicken Ereignis in AngularJS
'use strict';
angular.module('MyApp', []).
controller('MyCtrl', function($scope) {
$scope.click = function() {
setTimeout(function() {
var element = angular.element(document.getElementById('input'));
element.triggerHandler('click');
$scope.clicked = true;
}, 0);
};
});
<script src="https://code.angularjs.org/1.3.14/angular.js"></script>
<div ng-app="MyApp" ng-controller="MyCtrl">
<input id="input" type="file"/>
<button ng-click="click()">Click me!</button>
<div ng-if="clicked">Clicked</div>
</div>
Hinweis: Aus irgendeinem Grund muss die Taste zweimal gedrückt werden, um die Timeout-Funktion auszulösen.
Ich verwende setTimeout
wegen this post.
Wie programmiere ich programmgesteuert eine Dateieingabe mit nur AngularJS/Vanille JavaScript?
Der Code in der Frage sowie die vorgeschlagene Antwort ist ein bekanntes Anti-Muster in Angular.js - machen Sie keine DOM-Manipulation in Ihren Controllern, es sei denn, es ist in einem Direktiven-Controller. – yangmillstheory