ルータの親コンポーネントでファイルアップロードをトリガーしたい。親にある2つの関数、openFileSelect
およびuploadSelectedFile
を呼び出して<input type="file">
要素を制御する必要があります。親コンポーネントの角2のトリガーファイルのアップロード
私のルータは次のようになります。私はHomeComponent.tsに続いて
<div class="container">
<input type="file" (change)="fileChangeEvent($event)" #fileUpload>
<router-outlet></router-outlet>
</div>
:
{
path: '',
component: HomeComponent,
canActivate: [AuthService],
children: [
{
path: '',
redirectTo: '/dashboard',
pathMatch: 'full'
},
{
path: 'dashboard',
component: DashboardComponent
},
{
path: 'upload',
component: UploadComponent
}
]
}
ファイル入力は、子コンポーネントが表示されているHomeComponent.htmlテンプレートおよびルータアウトレットであります持っている:
最後に私は同じopenFileSelectメソッドをトリガーしたいUploadComponent
import { Component } from "@angular/core";
@Component({
templateUrl: "upload.component.html",
})
export class UploadComponent {
constructor() { }
openFileSelectInHomeComponent() {
// TODO - how to call HomeComponent.openFileSelect() ?
}
}
内部HomeComponentだから、私は2つの質問があります。プログラム的にイベントをクリックトリガするためにどのように
を?
子コンポーネントからルータの親コンポーネントに関数を呼び出す方法はありますか?
私は1つのボタンをクリックしてファイルアップロードのクリックイベントをトリガーすることができましたが、それは私の目標ではありません。たとえば、ユーザーがすべてのデータを入力したときにファイル入力ダイアログをトリガーするなど、関数を呼び出すことによってトリガーしたいと思います。私が達成した方法は、前述の '#fileUpload'参照変数です。私の問題は、コンポーネント関数内でその変数にイベントを送信する方法を知らないということです。 '@ ViewChild'デコレータで何とかなるはずですが、成功しませんでした。 – BoonZ