已解决!
我能够利用@StephenPaul的解决方案来解决以下问题
Angular 2.0 and Modal Dialog
哦!
模态组件选择器按预期放置在父级中,但我介绍了#模态,它允许父级调用模态组件的pulic Show()/Hide()函数。因此,我刚刚传入了选定的id,瞧,数据加载和显示。
<ul class="list-group">
<div *ngFor="let sar of sars">
<div class="block">
<a class="overlay" routerLink="/sar-detail/{{sar.sarSid}}" title="{{sar.title}} Details"></a>
<div class="inner">
{{sar.sarSid}} via {{sar.title}}
<a (click)="modal1.show(sar.sarSid)"
title="SAR Quick View"
style="cursor: pointer">
<span class="glyphicon glyphicon-eye-open pull-right" aria-hidden="true"></span>
</a>
</div>
</div>
</div>
</ul>
<app-sar-quickview #modal1>
<div class="app-modal-header">
<button type="button" class="close" aria-label="Close" (click)="modal1.hide()"><span aria-hidden="true">×</span></button>
<h4 class="modal-title"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> Suspicious Activity Report Quick View</h4>
</div>
<div class="app-modal-body">
<!-- Whatever content you like, form fields, anything
<input type="text"> -->
</div>
<div class="app-modal-footer">
<button type="button" class="btn btn-default" (click)="modal1.hide()">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</app-sar-quickview>
和模态组件标记
<div (click)="onContainerClicked($event)" class="modal fade" tabindex="-1" [ngClass]="{'in': visibleAnimate}"
[ngStyle]="{'display': visible ? 'block' : 'none', 'opacity': visibleAnimate ? 1 : 0}">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<ng-content select=".app-modal-header"></ng-content>
</div>
<div class="modal-body">
<ng-content select=".app-modal-body"></ng-content>
模态组件。ts
export class SarQuickviewComponent implements OnInit {
sar: SAR;
public visible = false;
private visibleAnimate = false;
constructor(private sarService: SARService, private route: ActivatedRoute, private location: Location) { }
ngOnInit() {
// this.getSarDetail();
}
public show(id: number): void {
// load sar data before making it visible
console.log('selected id: ' + id);
this.getSarDetail(id);
// now show the modal
this.visible = true;
setTimeout(() => this.visibleAnimate = true, 100);
}
public hide(): void {
this.visibleAnimate = false;
setTimeout(() => this.visible = false, 300);
}
public onContainerClicked(event: MouseEvent): void {
if ((<HTMLElement>event.target).classList.contains('modal')) {
this.hide();
}
}
getSarDetail(id: number): void {
// invoke service to fetch sar details based on id
this.sarService.getSARDetailForId(id)
.subscribe(sar => {
this.sar = sar;
console.log(this.sar);
});
}
}