2017-02-27 6 views
2

Ich habe dieses Problem neu gelöst, da es mein Problem in einer ähnlichen Diskussion nicht gelöst hat.Kein Provider für MdDialogRef

Ich habe immer noch den Fehler 'Kein Anbieter für MdDialogRef' auch nachdem ich das offizielle Tutorial Schritt für Schritt gefolgt.

Ich habe zwei Komponenten. Erste Komponente:

import { MdDialog} from "@angular/material"; 

import { DocumentDialogComponent } from './document-dialog.component';  

@Component({ 
    selector: 'documents-list', 
    template 
}) 
export class DocumentsListComponent { 

    constructor(
    public dialog: MdDialog) { 
    } 

    openFormDialog() { 

    let dialogRef = this.dialog.open(DocumentDialogComponent, 
    { 
    } 
    ); 
    dialogRef.afterClosed().subscribe(result => { 
     this.selectedOption = result; 
    }); 
    } 

Meine zweite Komponente (Der Dialog):

import { MdDialogRef} from "@angular/material"; 

@Component({ 
selector: 'document-dialog', 
template 
}) 

export class DocumentDialogComponent { 
    constructor(
     public dialogRef: MdDialogRef<DocumentDialogComponent> 
    ) {} 
} 

Und mein Modul config:

import { MaterialModule } from "@angular/material"; 
    import { DocumentsListComponent } from './documents-list.component'; 
    import { DocumentDialogComponent } from './document-dialog.component'; 

    imports : [ 
    MaterialModule.forRoot() 
    ], 

    declarations: [ 
     AppComponent, 
     DocumentListComponent, 
     DocumentDialogComponent 
    ], 
    entryComponents: [ 
     AppComponent, 
     DocumentListComponent, 
     DocumentDialogComponent 
    ], 
    providers: [ 
    ], 
    bootstrap: [ 
     AppComponent 
    ] 

Warum ich immer noch den Fehler haben:

Error in ./DocumentsListComponent class DocumentsListComponent - inline template:0:167 caused by: No provider for MdDialogRef! 
+1

Wo importieren Sie 'MaterialModule'? –

+0

Im Importbereich. Ich habe meine Frage aktualisiert – Kivo

+0

Haben Sie versucht, 'MaterialModule' anstelle von' MaterialModule.forRoot() 'zu importieren? – gsc

Antwort

4

Ich habe den Tag <DocumentsListComponent></DocumentsListComponent> in meiner Vorlage entfernt und jetzt funktioniert es.

2

können wir diesen Fehler beseitigen, indem componentInstance Eigenschaft in DocumentDialogComponent mit Bezug zu setzen.

Anstatt die MdDialogRef in die Komponente zu injizieren, können wir ihre Eigenschaft nach componentInstance der zurückgegebenen Referenz von Open-Methode festlegen. Hier

ist die modifizierte Arbeitscode:

import { MdDialog} from "@angular/material"; 

import { DocumentDialogComponent } from './document-dialog.component';  

@Component({ 
    selector: 'documents-list', 
    template 
}) 
export class DocumentsListComponent { 

    constructor(
    public dialog: MdDialog) { 
    } 

    openFormDialog() { 

    let dialogRef = this.dialog.open(DocumentDialogComponent); 

    //set the reference here 
    dialogRef.componentInstance.dRef = dialogRef; 

    dialogRef.afterClosed().subscribe(result => { 
     this.selectedOption = result; 
    }); 
    } 

Die Dialogkomponente ist hier:

import { MdDialogRef} from "@angular/material"; 

@Component({ 
selector: 'document-dialog', 
template 
}) 

export class DocumentDialogComponent { 
    public dRef:MdDialogRef<DocumentDialogComponent> 
    constructor() {} 
} 
Verwandte Themen