2017-08-04 3 views
2

私はAngular 4と素材を使用してWebアプリケーションを作成しています。私はマテリアル "Sidenav"コンポーネントを使用しています。 sidenavが開いているか閉じている場合は、イベントをトリガーしたいと思います。ボタンのclickプロパティに関数を追加すると、イベントがトリガされます。しかし、エスケープを押すか、navの外のどこかをクリックしてsidenavを閉じると、ボタンのclickイベントは論理的には機能しません。角材2 SideNav onOpen閉じる

サイドデナにはonOpenonCloseという2つのプロパティがありますが、使い方が分かりません。それとも、彼らは私がやりたいことを達成するための適切なプロパティですか?よりよく理解するためにここで

plunker:sidenavは、ボタンを押していないことで閉じられている場合http://embed.plnkr.co/ZPmhbFm1hbOUKYp1rV6J/

結果が「世界」と警戒しなければなりません。

答えて

2

私はあなたのplunkerのデモを見てきました。このようなonOpenonCloseを使用することはできません。あなたのmd-sidenav HTMLは次のように変更します。より良く理解するためにhttps://plnkr.co/edit/96Hz4rZFJCuyNZDwEpGd?p=preview

+0

<md-sidenav class="example-sidenav" #sidenav mode="over" opened="false" (open)="menufunction('SideNav Opened')" (close)="menufunction('SideNav Closed')"> 

ここで更新plunkへのリンクである、これは私が括弧でそれらを置くことによって、任意のコンポーネントのmethondを呼び出すことができることを意味します。または、ドキュメントには、このコンポーネントが(オープン)および(クローズ)が存在すると書かれていますか? – Leonzen

+0

ドキュメントを見ると '@Output( 'open')onOpen'の罰金が科せられ、 'open'のパラメータはイベントを指定します。 component.tsで同じことをしたい場合は、次のようにonOpenイベントを購読する必要があります: 'this.sidenav.onOpen.subscribe(()=> this.menufunction( 'Hello'));'私は個人的に私は答えの中で指定したアプローチを単純なものより好んでおり、 '@ViewChild( 'sidenav')'の取得には関係しません。ここにはドキュメントへのリンクがあります:https://material.angular.io/components/sidenav/api – Faisal

+0

もう1つの質問(私は非常に角度がありません)ですので、 '@Output( 'open-start ')onOpenStart'プロパティ。つまり、このthis.sidenav.onOpenStart.subscribe(()=> this.menufunction( 'Hello')); 'のように私はそれを購読することができます。しかし、私は(open-start)= "menufunction( 'Hello');"と書くこともできますか? – Leonzen

1

onOpenおよびonCloseは、あなたのsidenavによって放出されたイベントです。あなたが持っているそれらを使用するために

コンポーネントの属性に「ストア」あなたsidenavへ:

@ViewChild('sidenav') 
public sidenav: MdSidenav; 

、あなたはこれらのイベントが送出された時に何をしたいのかやってイベントをサブスクライブする(私は考え)ngOnInit()にこのコードを配置することをお勧め:

this.sidenav.onOpen.subscribe(() => this.menufunction('Hello')); 
関連する問題