2017-08-03 24 views
3

私はプログラムでクリックしてドキュメントをトリガしようとしています。クリックイベントを手動でトリガーする方法はありますか?

私のtest-compはページ内の複数の場所に表示されており、test-compがクリックされたとき、またはドキュメントのクリックが発生したときにすべて非表示にしたいとします。

@Component({ 
    selector: 'test-comp', 
    template: `<div *ngIf="showMe">stuff</div> and more…` 
}) 

export class TestComponent { 
    showMenu: boolean; 

    constructor(public elementRef: ElementRef) { 
    } 

    @HostListener('document:click', ['$event']) 
    documentClick(event: MouseEvent) { 
    //hide my component when there is a document click  
    this.toggleComponent(); 
    } 

    toggleComponent() { 
    // I am trying to programmatically fire a document click here to hide all test-comp if the test-comp 
    // component itself is clicked 
    // this.elementRef.nativeElement will select all test-comp component but not sure what to do next 
    this.showMe = !this.showMe; 
    } 

私は私のtoggleComponentメソッドの内部プログラムで文書のクリックを発射する方法がわかりません。それを行う方法はありますか?どうもありがとう!

+0

クリックします:click'は、この現在のコードは動作しません –

+0

をtrigerredされますが、全身をクリックすることができますか?あなたのテストcompは文書 – Huangism

+0

の一部です。問題は親のDOM要素にevent.propagation()を設定してバブルしないようにすることです。 – Jwqq

答えて

5

あなたはHTMLElement.click()を使って任意の要素にclickイベントをトリガすることができます

document.getElementById('myEl').click() 

あなたはそれがレンダリングされた要素文書上クリックしないことができないので。文書や `ドキュメントまでのバブル任意の要素に

document.body.click() 
+0

ありがとうございますが、要素からのクリックではなく、ドキュメントのクリックをトリガする必要があります。 +1 – Jwqq

+0

@ Jwqq次に、body html要素で_click_できます。私の更新された答えを見てください:) –

+0

魅力のように動作します。ありがとう。 – Jwqq

関連する問題