Ich habe ein Problem mit ngx-Bootstrap mit Bootstrap 4: Nach dem erfolgreichen Öffnen eines Modals, wenn ich es schließe, kann ich den Hintergrund für alle meine Seite sehen, so dass meine App unbrauchbar.ngx-bootstrap Bootstrap4: nach dem Schließen modal ist immer noch da
Wenn ich den config-Parameter {budget: false} verwende, wenn ich das modal öffne ... wenn ich es schließe, ist kein Hintergrund sichtbar, aber body-Element bekommt modal-offene Klasse, also ist meine App wieder völlig unbenutzbar.
Es ist der Code:
Komponente: Produkt-list.component.ts
import { Component, OnInit, TemplateRef } from '@angular/core';
import { BsModalService } from 'ngx-bootstrap/modal';
import { BsModalRef } from 'ngx-bootstrap/modal/modal-options.class';
import { config } from '../config'
import { ProductService } from '../product/product.service';
import { Product } from '../product/product';
@Component({
selector: 'app-product-list',
templateUrl: './product-list.component.html',
styleUrls: ['./product-list.component.css'],
providers: [ProductService, BsModalService]
})
export class ProductListComponent implements OnInit {
loadedProducts: Array<Product> = [];
public modalRef: BsModalRef;
constructor(
private productService: ProductService,
private modalService: BsModalService) {
}
ngOnInit() {
this.productService.loadProductList().then(
serverProducts => this.loadedProducts = serverProducts);
}
deleteButtonClicked(product2BeDeleted: Product,
confirmDeleteModalTemplate: TemplateRef<any>): void {
if (config.showConfirmDeleteModal) {
this.modalRef = this.modalService.show(confirmDeleteModalTemplate);
}
}
}
Komponentenvorlage: Produkt-list.component.html
<div class="card">
<div class="card-block">
<h4 class="card-title">Listado de productos</h4>
<div *ngIf="loadedProducts.length == 0" class="alert alert-warning" role="alert">
<span class="fa fa-warning"></span> No hay productos disponibles
</div>
<table *ngIf="loadedProducts.length > 0" class="table table-striped">
<thead class="thead-inverse">
<tr>
<th></th>
<th>SKU</th>
<th>Nombre</th>
<th>Precio</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let productRow of loadedProducts">
<td>
<a [routerLink]="['/product/', productRow.id]" title="Editar este producto"
class="btn btn-sm btn-primary">
<span class="fa fa-pencil"></span>
</a>
<button title="Eliminar este producto"
(click)="deleteButtonClicked(productRow, confirmDeleteModalTemplate)"
class="btn btn-sm btn-danger">
<span class="fa fa-trash"></span>
</button>
</td>
<td>{{productRow.sku}}</td>
<td>{{productRow.name}}</td>
<td>{{productRow.price}}</td>
</tr>
</tbody>
</table>
<ng-template #confirmDeleteModalTemplate>
<div class="modal-header">
<h5 class="modal-title" id="confirmDeleteModalLabel">Confirmar eliminación de un producto</h5>
<button type="button" class="close" aria-label="Cerrar" (click)="modalRef.hide()">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>Estas a punto de eliminar este producto:</p>
<ul>
<li></li>
</ul>
<p><strong>¡Ten en cuenta que esta acción no se puede deshacer!</strong></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" (click)="modalRef.hide()">Cancelar</button>
<button type="button" class="btn btn-primary">Eliminar</button>
</div>
</ng-template>
</div>
</div>
ich jemand hoffen kann helfen Ich habe keine Lösung gefunden, ich versuche so nah wie möglich an die Demos von ngx-bootstrap doc heranzukommen, aber ... auf keinen Fall.
Vielen Dank im Voraus!
Vielen Dank für Ihre Antwort, aber ich habe einige Probleme mit dieser Lösung: Wenn ich BsModalService von Anbietern meiner Komponente entfernen ... Dann nehme ich an Ich muss auch den modalService auf dem Konstruktor meiner Komponente entfernen, und dann ... I Ich kann this.modalService.show() nicht aufrufen, um das Modal anzuzeigen ... bin ich richtig? – Daniprofe
Nein, durch den Import des Modal-Moduls wird der Dienst bereits "bereitgestellt". Untergeordnete Komponenten (Ihre Komponente) haben Zugriff auf alle Dienste, die von einem übergeordneten Benutzer bereitgestellt werden. – Ironflash
Sorry Ironflash, aber ich verstehe deine Antwort immer noch nicht. Bitte beachten Sie die offizielle Dokumentation von ngxbootstrap: https://valor-software.com/ngx-bootstrap/#/modals. Sie bitten Sie, BsModalService auf einer KOMPONENTE zu importieren, und sehen Sie sich bitte den Konstruktor an (privater modalService: BsModalService). DER SERVICE WIRD IN CONSTRUCTOR INJIZIERT. Wenn wir also das Modal öffnen wollen, führen wir this.modalService.show (template) aus; Wie kann ich auf die "show" -Methode des Dienstes zugreifen, wenn ich den Dienst nicht in den Konstruktor einfüge? – Daniprofe