1

我正在尝试解决如何使用Material 2 sidenav#rightNav从子组件模板单击事件中触发父组件模板中的本地引用。我想我需要使用注释,但不知道如何。(click)="rightNav.open()"@ViewChild

子组件模板(app-conditions-list):

<div *ngFor="let condition of conditions" [class.selected]="condition === selectedCondition"
            (click)="rightNav.open()"></div>

父组件模板(条件组件):

import { Component} from '@angular/core';
import { ConditionsListComponent } from './listComponent/conditions-list.component';


@Component({
    moduleId: module.id,
    selector: 'app-conditions',
    template: `
            <md-sidenav #rightNav align="end" mode="side">
            "Condition details will open here on click event"
            </md-sidenav>
            <app-conditions-list></app-conditions-list>`,
    styleUrls: ['./conditions.component.css'],
    directives: [
        ConditionsListComponent,
    ]
})

export class ConditionsComponent  {
    title = "Conditions Manager"
}

子组件嵌套在父组件模板中。谢谢!

4

2 回答 2

1

您可以将输出添加到子组件并监听其中的事件

export class ConditionsListComponent {
  @Output() navOpen:EventEmitter = new EventEmitter();
}

您可以使用模板变量来引用兄弟元素,例如:

<div #rightNav align="end" mode="side" (close)="close($event)"</div>
<app-conditions-list (navOpen)="rightNav.open()"></app-conditions-list>`,

和事件类似的事件

<div *ngFor="let condition of conditions" [class.selected]="condition === selectedCondition"
        (click)="navOpen.next(null)"></div>
于 2016-07-24T11:02:19.597 回答
1

您需要将您的活动从您的孩子传给您的父母:

The child :  

export class ConditionsListComponent  {
   @Output('myEvent') myEvent = new EventEmitter();

   private bubbleUp($event:Event){

     myEvent.emit($event)
  }
}

它的观点:

  <div *ngFor="let condition of conditions" [class.selected]="condition === selectedCondition"
        (click)="bubbleUp($event)"></div>

和父母:

     import { Component} from '@angular/core';

@Component({
moduleId: module.id,
selector: 'app-conditions',
template: `
        <div #rightNav align="end" mode="side" (close)="close($event)"</div>
        <app-conditions-list (myEvent)='gotTheEvent($event)' ></app-conditions-list>`,
styleUrls: ['./conditions.component.css'],
providers: [],
directives: [
    ConditionsListComponent,
]
})

export class ConditionsComponent  {
   title = "Conditions Manager";

   gotTheEvent($event){

     console.log('I got this event from my child',$event);

    //you can do whatever you want : 

     rightNav.open()
  }
}
于 2016-07-24T11:03:42.243 回答