0
Angular1では、$scope.braodcast
があり、Angular2のEventEmitter
は、子から親へのイベントのみを送信できます。だから私はそのイベントを子どもの指示にどのように伝えることができますか?Angular2、イベントを親コンポーネントから子ディレクティブにブロードキャストする方法
が、これは私の子供ディレクティブ
import { Directive, ElementRef, Input, Output, OnInit } from '@angular/core';
import { EventEmitter } from '@angular/core';
@Directive({
selector: '[svgLine]'
})
export class HighlightDirective implements OnInit {
message: string;
constructor(
private el: ElementRef,
) {}
@Input() svgLineClientWidth: number;
@Input() svgLineClientHeight: number;
@Input() svgToClientWidth: number;
@Input() svgToClientHeight: number;
@Input() svgLineFromId: number;
@Input() svgLineToId: number;
ngOnInit(): void {
// receive the event
}
}
であり、これは私の親コンポーネントである
import { Component, OnInit, EventEmitter, Output } from '@angular/core';
import { Tools } from '../class/tools'
import { DetailListService } from './detail-list.service';
@Component({
// moduleId使用于CommonJs
moduleId : module.id,
selector : 'detail-list',
templateUrl : './detail-list.component.html',
styleUrls: ['./detail-list.component.css'],
})
export class DetailListComponent implements OnInit {
constructor(
private detailListService : DetailListService,
) {}
clickItem() {
// broadcast the event here
}
}
詳細-list.component.html
<svg class="svg--position">
<g *ngFor="let item of model.data">
<g pointer-events="painted"
svgLine
*ngFor="let to of item.to"
[svgLineClientWidth]="item.clientWidth"
[svgLineClientHeight]="item.clientHeight"
[svgToClientWidth]="to.clientWidth"
[svgToClientHeight]="to.clientHeight"
[svgLineFromId]="item.id"
[svgLineToId]="to.id"
id="{{item.title}}{{item.id}}{{to.id}}"
>
</g>
</g>
</svg>
angle1の$ attrs.idのように、ディレクティブのIDを取得するにはどうすればよいですか? –
ディレクティブにElementRefを挿入して、それが装飾する要素にアクセスする –