進捗ボタンとして機能するコンポーネントsi-button
を作成しました(クリックすると、ロードインジケータが表示されます)。正しいコンテキストで角度実行メソッドが渡されました
私はこのようなsi-button
コンポーネントにクリックで実行されるメソッドへの参照渡し:register
方法が約束を返し、ローディングインジケータがあれば、約束のISN」として示されている
<si-button [pb-click]="register">Register</si-button>
を解決されました。 SIButtonComponent
クラスでは、ボタンをクリックするとregister
メソッドが実行されます。
SIButtonComponent
:
export class SIButtonComponent{
...
@Input('pb-click') pbClick :() => Promise<any> = null;
handleClick($event){
this.loading = true;
this.pbClick().then(() => {
this.showSuccess();
}, (data) => {
this.showError();
});
}
...
}
RegisterComponent
:
export class RegisterComponent{
register() : Promise<any> {
return new Promise((resolve, reject) => {
this.auth.register(this.email, this.password).subscribe((org : Organization) => {
resolve();
}, (error : ErrorResponse) => {
reject();
});
});
}
}
通報 方法register
がSIButtonComponent
のインスタンスから実行されるので、this
はSIButtonComponent
インスタンスではなくRegisterComponent
を指します。どのようにこれを正しく行う必要がありますか? pb-click
パラメータには@Input
ではなく@Output
を使用する方が理にかなっていますが、クリックイベントが発生した後にどのようにしてPromise
-instanceを取得できるかわかりません。
export class RegisterComponent {
registerFunction =() => this.register();
...
}
<si-button [pb-click]="registerFunction">Register</si-button>
これは素晴らしい作品が、なぜ: –
矢印関数は 'this'にバインドされているためです。それがなぜ存在するのかの主な理由です(減らされた冗長性以外)。 'function(){return this.register();}と同じです。 }。バインド(これ) '。 –
素晴らしいです、ありがとう! –