2016-04-22 4 views
3

私はこのすべてを正しく表現しているかどうかはわかりません。 Angular2でロットが変更されました。フォームデータをコンポーネントのサービスに渡そうとしています。私は "Generate"ボタンをクリックするたびにこのデータを渡したいと思います。私は、フォームデータをオブジェクトにカプセル化し、そのオブジェクトをコンポーネントに注入されたサービスに渡したいと考えています。サービスはすべての重い持ち上げを実行します。すべてのコンポーネントが実際に出力を表示します。Angular2がクリックハンドラにデータを渡しています

generator.component.ts

export class Generator { 
    passwords: string[]; // output array 
    passwordsObj: Object = { // form data passed to service 
     letters: "", 
     numbers: "", 
     symbols: "", 
     amount: "" 
    }; 
    constructor(gs: GeneratorService) { 
     this.passwords = gs.generatePasswords(passwordsObj); // originally hard-coded, I want to now trigger this method when the "Generate" button is clicked 
    } 

    clicked(obj) { 
     // handle the click event? 
    } 
} 

私はgeneratePasswordsメソッドは、引数としてpasswordsObjを取りたいです。私はそれを行う方法を知っています。コンポーネントのボタンをクリックしたときに、サービスのgeneratePasswordsメソッドをトリガする方法がわかりません。

generator.component.htmlスニペット

<button type="submit" (click)="clicked(passwordsObj)">Generate</button> 

答えて

2

使用privatepublicを作成するを初期化します3210メンバー/プロパティ(その詳細については、セクションパラメータのプロパティをTypeScript Handbookを参照してください):

constructor(private gs: GeneratorService) {} 

その後、あなたのクリックイベントハンドラでは、単にサービスのメソッドを呼び出し、パラメータとしてごpasswordsObjを渡す:

clicked() { 
    this.passwords = this.gs.generatePasswords(this.passwordsObj); 
} 

passwordsObjをイベントハンドラに渡す必要はありません。コンポーネントのプロパティであるため、clicked()メソッドはthisオブジェクトを介してアクセスできます。

+0

ええ、ありがとう@ジーンフィリップ編集のため。 –

+0

良い答えをありがとう。 – BrianRT

+0

私はhttp://stackoverflow.com/questions/36109641/angular2-component-one-way-binding-or-inputに関する他の質問がありますが、それを複製したくないです(私は他の質問にコメントすることはできません)まだ)。私は ''のようなユーザ入力をバインドしようとしていますが、動作していません。私はそれがデータソースにユーザー入力をバインドすると思った。私は双方向バインディングを使いたくないです( '((ngModel))'を避けてください)。そのために '@ Input'を使用する必要がありますか? – BrianRT

0

あなたはこれを試みることができる:

clicked() { 
    this.passwords = gs.generatePasswords(this.passwordsObj); 
} 

<button type="submit" (click)="clicked()">Generate</button> 
関連する問題