NullInjectorError: No provider for MatDialogRef

Discussão em 'Angular' iniciado por rc21, Fevereiro 19, 2025.

  1. rc21

    rc21 Guest

    I can't inject MatDialogRef as it described in documentation: https://material.angular.io/components/dialog/overview

    When i'm trying to do it i'v got error:

    ERROR Error: StaticInjectorError[MatDialogRef]: StaticInjectorError[MatDialogRef]: NullInjectorError: No provider for MatDialogRef!

    app.module.ts


    import { NgModule } from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { FormsModule } from '@angular/forms';

    import {
    MatInputModule,
    MatDialogModule,
    MatProgressSpinnerModule,
    MatButtonModule,
    MatDialog,
    MatDialogRef
    } from '@angular/material';

    import { ApiModule } from '../api/api.module';
    import { RoutingModule } from '../routing/routing.module';

    import { RegistrationComponent } from './components/registration.component';
    import { LoginComponent } from './components/login.component';

    import { AccountService } from './services/account.service';

    @NgModule({
    imports: [
    BrowserModule,
    MatInputModule,
    MatDialogModule,
    MatProgressSpinnerModule,
    MatButtonModule,
    FormsModule,
    RoutingModule,
    ApiModule
    ],
    declarations: [
    RegistrationComponent,
    LoginComponent
    ],
    entryComponents: [
    LoginComponent,
    RegistrationComponent
    ],
    providers: [
    AccountService,
    MatDialog,
    MatDialogRef
    ]
    })
    export class AccountModule {}

    home.component.ts


    import { Component } from '@angular/core';

    import { MatDialog } from '@angular/material';
    import { RegistrationComponent } from '../account/components/registration.component';

    @Component({
    moduleId: module.id.replace('compiled', 'app'),
    templateUrl: 'home.component.html'
    })
    export class HomeComponent
    {
    constructor(private modalService: MatDialog) {}

    public openModal() : void
    {
    let dialog = this.modalService.open(RegistrationComponent, {});
    }
    }

    registration.component.ts


    import { Component } from '@angular/core';
    import { Router } from '@angular/router';
    import { MatDialogRef } from '@angular/material/dialog';

    import { User } from '../../../models/domain/User';
    import { ApiUserService } from '../../api/entity-services/user.service';
    import { AuthService } from '../../auth/auth.service';
    import { AccountService } from '../services/account.service'

    @Component({
    selector: 'registration-component',
    templateUrl: 'app/modules/account/templates/registration.component.html'
    })
    export class RegistrationComponent
    {
    public user :User = new User();

    public errorMessage :string;

    public isLoading :boolean;

    constructor
    (
    private userService :ApiUserService,
    private authService :AuthService,
    private accountService :AccountService,
    private router :Router,
    public dialogRef :MatDialogRef<RegistrationComponent>
    )
    {
    this.isLoading = false;
    }

    public onSubmit(e) :void
    {
    e.preventDefault();
    this.isLoading = true;

    this.userService
    .Create(this.user)
    .subscribe(
    user =>
    {
    this.user.id = user.id;
    this.user.login = user.login;


    this.authService
    .Login(this.user)
    .subscribe(
    token =>
    {
    this.accountService.Load()
    .subscribe(
    account =>
    {
    this.user = account;
    this.isLoading = false;
    this.dialogRef.close();

    let redirectRoute = account.activeScopeId
    ? `/scope/${account.activeScopeId}`
    : '/scope-list/';

    this.router.navigate([redirectRoute]);
    },
    error => this.errorMessage = <any>error
    );
    },
    error => this.errorMessage = <any>error
    );
    },
    error => this.errorMessage = <any>error
    );
    }
    }

    Continue reading...

Compartilhe esta Página