2017-06-11 4 views
0

Ich bin auf der Suche nach dem besten Ansatz zur Implementierung von Modal in Angular 4 nach der Komponentenarchitektur.Modals - Angular4

Ich habe viele Tutorials, externe Bibliotheken, usw. gesehen, und die Verwendung ist ziemlich begrenzt. Im Grunde verfolgen alle von ihnen den Ansatz, einen modalen Dienst zu erstellen, um die Modale zu verwalten, und eine modale Komponente mit transclude, um die Vorlage abhängig vom Inhalt zu ändern. Dies erfordert, dass wir das Modal in die Vorlage der aktuellen Komponente einfügen müssen. Etwas wie folgt aus:

@Component({ 
selector: 'modal', 
template: ` 
    <div [ngClass]="{'closed': !isOpen}"> 
     <div class="modal-overlay" (click)="close(true)"></div> 

     <div class="modal"> 
      <div class="title" *ngIf="modalTitle"> 
       <span class="title-text">{{ modalTitle }}</span> 
       <span class="right-align" (click)="close(true)"><i class="material-icons md-24">clear</i></span> 
      </div> 

      <div class="body"> 
       <ng-content></ng-content> 
      </div> 
     </div> 
    </div> 

Und dann die Nutzung wie folgt aus:

<modal title='My title'> 
    <div> 
    My Modal 
    </div> 
</modal>` 

Dies ist eine feine Ansatz für kleine Anwendungen. Für große Anwendungen ist das keine gute Lösung. Die Idee wäre, einen Dienst zu haben, der Komponenten dynamisch öffnet, ohne sie zu definieren. So etwas in der Komponente: this.openModal(CustomModal)

Das ng-bootstrap tut etwas sehr ähnliches, aber es verwendet Bootstrap 4 und es ist immer noch in Alpha, so dass wir derzeit nicht sicher sind, ob es eine gültige Option ist. Jede Bibliothek, die auf diese Art und Weise funktioniert?

Antwort

0

Ich empfehle sehr, ngx-bootstrap nicht zu verwenden und @ng-bootstrap zu verwenden. ngx-bootstrap's Mangel an Funktionen, hat @ ng-Bootstrap mehr Funktionen und Stabilität.

Ich begann mit ngx-bootstrap und änderte es schließlich. Ich sah auch Angular Team empfiehlt @ ng-Bootstrap-Paket in der ng-Conf.

Eigentlich habe ich mit einigen Komponenten von ngx-Bootstrap beigetragen, weil sie unvollständig sind.

+0

ng-bootstrap erfordert Bootstrap 4 nicht? Und kannst du die Basisvorlage des Modals ändern? – Nocktu

+0

Sie können @ ng-bootstrap mit Bootstrap 3 oder 4 verwenden, beide werden unterstützt. Sie können ein Modal mit ng-template wie ngx-bootstrap öffnen und eine Komponente öffnen (das ist meine Lieblingsoption) 'this.modalService.open (MyComponent)' hier mehr Infos: https://ng-bootstrap.github.io/ #/components/modal – Serginho

+0

Ja, ng-bootstrap ist wahrscheinlich das interessanteste und macht was ich erwarte. Öffnen der Modale durch Dienst, der die Komponente übergibt. Aus Ihren Erfahrungen mit der Bibliothek funktionieren die Inputs und Outputs damit? Eine der Ideen besteht darin, ein Objektelement an das Modal zu übergeben, es mithilfe eines Formulars zu manipulieren und dann die Hauptseite nach der Anfrage zu aktualisieren. Im Grunde muss das Modal eine Antwort an die Komponente senden, die das Modal öffnet. Wenn das Sinn macht. – Nocktu