2017-07-14 4 views
1

Ich versuche, das ng-2 Bootstrap Modal in meinem Code arbeiten zu lassen. Ich habe bereits den ng2-bootstrap tooltip zum laufen gebracht, keine Probleme, aber das Modal gibt mir eine Menge Ärger. Ich habe alle relevanten GitHub-Seiten und Stackover-Flow-Fragen überprüft, aber ich kann es immer noch nicht herausfinden. dies ist mein Setup:Es gibt keine Direktive mit "exportAs" für ng2-bootstrap

Mein router.html (die Vorlage)

... 
<div class="modal fade" alertModal #staticModal="alert-modal" role="dialog" aria-labelledby="alertModal">` 

<div class="modal-dialog" role="document"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
      <h3 class="modal-title" id="alertModalTitle"></h3> 
     </div> 
     <div class="modal-body" id="alertModalBody"> 

     </div> 
     <div class="modal-footer"> 
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
     </div> 
    </div> 
</div> 
</div> 
... 

Teil meiner app.module.ts:

import { TooltipModule,ModalModule } from 'ng2-bootstrap'; 
@NgModule({ 
    imports: [ModalModule.forRoot(), TooltipModule.forRoot(), ...], 
    declarations: [AppComponent,...], 
    bootstrap: [AppComponent], 
    providers: [...] 
}) 
export class AppModule {} 

Mein app.component.ts dass diese modal verwendet :

import { Component, OnInit, Inject, ViewChild, ElementRef } from '@angular/core'; 
import { Router } from '@angular/router'; 
import { MultistepService, StepDirection } from '../service/multistep.service'; 
import { ModalDirective } from 'ng2-bootstrap'; 

@Component({ 
    selector: 'my-app', 
    host: { 
     'class': 'container-fluid' 
    }, 
    templateUrl: './app/component/router.html' 
}) 

export class AppComponent implements OnInit { 

    @ViewChild('staticModal') 
    private alertModal:ModalDirective; 

    <some methods here> 
} 

Dies ist der Fehler, den ich immer bin:

Template parse errors: 
There is no directive with "exportAs" set to "alert-modal" 

Gibt es etwas, was mir fehlt? Danke im Voraus!

+0

Sie es aber Variable 'exportAs' nicht auf etwas gleich gesetzt https://github.com/valor-software /ngx-bootstrap/blob/development/src/modal/modal.component.ts#L40 Sie können über '# staticModal =" bs-modal "' wie '# something =" exportAsVar "' nachdenken. Sie können Ihre '# Variable' aufrufen, was immer Sie wollen, aber es sollte immer gleich 'bs-modal' sein, also' # myMegaVariable = "bs-modal" 'und dann können Sie' myMegaVariable.show() 'in der Vorlage – yurzui

Antwort

1

In der ersten Zeile der Vorlage, Für diesen Teil #staticModal

+0

omg why verwenden hat es funktioniert?! in ihren Dokumenten haben sie dieses Beispiel: '

' wo sie statisches modal = zu etwas setzen. – aBrokenSniper

+0

Dieses Bit Code erstellt nur eine Vorlagenvariable 'staticModal', um den Zugriff auf das Element vom @ViewChild-Dekorator zu erleichtern. Es muss eigentlich nichts anderes tun! Du könntest 'staticModal' durch irgendeinen anderen Namen ersetzen, solange es an beiden Stellen konsistent ist. – Kai

+0

Ah, ich verstehe. weißt du also, warum sie in ihrem Beispiel etwas gleichgesetzt haben? Dieser Teil verwirrte mich. – aBrokenSniper

1

#staticModal="alert-modal" ändern:

<div class="modal fade" alertModal #staticModal="alert-modal" 

gibt es eine Richtlinie alertModal angewendet. Sie versuchen, es in der Komponente zuzugreifen:

@ViewChild('staticModal') private alertModal:ModalDirective; 

Es besteht jedoch keine Notwendigkeit Vorlage Referenzgröße staticModal einzuführen, können Sie die Richtlinie direkt von Klasse zugreifen:

@ViewChild(ModalDirective) private alertModal:ModalDirective; 

Die Vorlage Referenz Variable staticModal wäre erforderlich, wenn Sie die Instanz von ModalDirective an einem anderen Ort in html verweisen wollen:

<div class="modal fade" alertModal #staticModal="alertModal"... 
<span>{{staticModal.someProperty}}</span> 

jedoch dafür die ModalDirective Klasse zu arbeiten hat exportAs im Dekorateur wie folgt zu definieren:

@Directive({ 
    exportAs: "alertModal" 
+0

Das ist großartig! Ich denke ich verstehe es jetzt. Es funktioniert, aber wenn ich das Modal in meiner Komponente verwende, versuche ich "alertModal.show() ist eine eingebaute Funktion der ModalDirective. Es sagt jedoch immer wieder, dass show keine Funktion ist, da alertModal als ein ElementRef-Objekt behandelt wird, jetzt als ein Modal-Direktivitätsobjekt. Weißt du, warum das sein könnte? – aBrokenSniper

+0

@aBrokenSniper, wenn Sie es wie dieses '@ViewChild (ModalDirective)' abfragen, dann wird es die korrekte Klasse enthalten. Wenn Sie es mithilfe der Vorlagenreferenz abfragen, müssen Sie den Parameter "read" hinzufügen, [hier] (https://stackoverflow.com/a/45064618/2545680) Ich erkläre es. –

Verwandte Themen