Ответ 1
Одним из возможных решений является использование Angular 2 шаблонных переменных и назначение переменной шаблона входному элементу; после выполнения вы можете напрямую вызывать методы, определенные на этом входе от другого элемента, например кнопки.
В одном из моих приложений я сделал следующее: он работает на IE11, Firefox и Chrome:
<button (click)="fileInput.click()" class="btn btn-default">Upload</button>
<span style="visibility: hidden; position: absolute; overflow: hidden; width: 0px; height:0px;border:none;margin:0; padding:0">
<input type="file" #fileInput ng2FileSelect [uploader]="uploader" />
</span>
Таким образом, как вы можете видеть, кнопка просто вызывает событие click_fileInput в своем собственном событии кликов.
Обратите внимание, что я зарываю входные данные в пределах span, а затем скрываю диапазон от представления через кучу стилей, так что отображается только кнопка. Также обратите внимание, что применение этих стилей к входному элементу напрямую вызывало проблемы в IE11.