Ich versuche, eine Bootstrap-Popup-Komponente als verschachtelte Komponente mehrmals auf einer einzigen Seite zu verwenden. Diese Popup-Komponente hat andere Werte als @Input()
. Das Problem ist, dass jedes Popup auf der Seite die gleichen Werte wie das letzte Popup hat. Also, wie kann ich mehrere Instanzen der gleichen verschachtelten Komponente bekommen? Hierangular2 - Verwenden der gleichen Komponente als verschachtelte Komponenten mit verschiedenen Eingaben mehrmals in ein Elternteil Komponente
ist die übergeordnete Komponente:
@Component({
selector: 'my-parent',
templateUrl: 'app/components/parent/parent.component.html',
directives: [PopupDirective]
})
export class ParentComponent {
private doSomething() {
// do something
}
}
Dies ist die html meiner Stammkomponente:
<button class="btn btn-success"
(click)="popup1.show()">Call Popup 1</button>
<button class="btn btn-success"
(click)="popup2.show()">Call Popup 2</button>
<my-popup #popup1
[id]="1"
[title]="Popup 1"
[body]="This is my test popup 1"
(confirmation)="doSomething()"></my-popup>
<my-popup #popup2
[id]="2"
[title]="Popup 2"
[body]="This is my test popup 2"
(confirmation)="doSomething()"></my-popup>
Hier ist die Pop-up-Komponente:
@Component({
selector: 'my-popup',
templateUrl: 'app/directives/popup/popup.directive.html'
})
export class PopupDirective {
@Input() id: string;
@Input() title: string;
@Input() body: any;
@Output() confirmation: EventEmitter<string> = new EventEmitter<string>();
private triggerPopup: string;
constructor() {
this.triggerPopup = "triggerPopup";
}
confirm() {
this.confirmation.emit('Click from nested component');
}
show() {
document.getElementById(this.triggerPopup).click();
}
}
Und schließlich die html Code meines Popups
<a id="{{ triggerPopup }}"
href="#popup{{ id }}"
data-toggle="modal"
[hidden]="true"></a>
<div class="modal fade" id="popup{{ id }}" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4>{{ title }}</h4>
</div>
<div class="modal-body">
<div>{{ body }}</div>
<div style="clear: both;"></div>
</div>
<div class="modal-footer">
<a class="bin ban-default"
data-dismiss="modal">
Close</a>
<a class="bin ban-success"
data-dismiss="modal"
(click)="confirm()">
Confirm</a>
</div>
</div>
</div>
</div>
Okay, zu verwenden, das ist logisch. Aber es repariert es überhaupt nicht. Ich erkannte, dass auch 'href =" # popup {{id}} "' immer nur '# popup' sein wird. Ich könnte dasselbe wie in Ihrer Antwort oben tun, aber wie kann ich dann das Popup über das Bootstrap-Framework auslösen? Ich kann 'href =" # popup {{id}} "' nicht einfach machen, weil die URL etwas wie '/ # popup [Object]' wäre. – user2741109
Ich würde vorschlagen, einen anderen Eingabeeigenschaftsnamen als 'id' zu verwenden. 'id' ist eine Eigenschaft von' Element'. –
Danke, jetzt funktioniert es. – user2741109