NullInjectorError: Нет провайдера для ViewportScroller - PullRequest
6 голосов
/ 04 июля 2019

Я создаю простое угловое приложение, используя Angular Material для разработки внешнего интерфейса. Приложение имеет только 2 компонента, отображаемых на одной странице. Когда я работаю с приложением, оно возвращается в консоли:

NullInjectorError: "StaticInjectorError (AppModule) [RouterScroller -> ViewportScroller]: StaticInjectorError (Платформа: ядро) [RouterScroller -> ViewportScroller]: NullInjectorError: Нет провайдера для ViewportScroller! "

AppModule.ts

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

      import { AppRoutingModule } from './app-routing.module';
      import { AppComponent } from './app.component';
      import { Material } from './Material';
      import { DataFormComponent } from './data-form/data-form.component';
      import { TemplateFormComponent } from './template-form/template-form.component';
      import { FormsModule } from '@angular/forms';


      @NgModule({
        declarations: [
          AppComponent,
          DataFormComponent,
          TemplateFormComponent,
        ],
        imports: [
          BrowserModule,
          AppRoutingModule,
          Material,
          FormsModule
        ],
        providers: [],
        bootstrap: [AppComponent]
      })
      export class AppModule { }

appComponents.ts

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

Material.ts (модуль для всех угловых компонентов материала)

                import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
            import {NgModule} from '@angular/core';
            import {MatTabsModule} from '@angular/material/tabs';
            import {MatInputModule} from '@angular/material';
            import {MatCardModule} from '@angular/material/card';
            import {MatToolbarModule} from '@angular/material/toolbar';
            import {MatFormFieldModule} from '@angular/material/form-field';
            import {MatButtonModule} from '@angular/material/button';

            @NgModule({
                imports:
                [
                    BrowserAnimationsModule,
                    MatTabsModule,
                    MatCardModule,
                    MatToolbarModule,
                    MatFormFieldModule,
                    MatInputModule,
                    MatButtonModule
                ],
                exports:
                [
                    BrowserAnimationsModule,
                    MatTabsModule,
                    MatCardModule,
                    MatToolbarModule,
                    MatFormFieldModule,
                    MatInputModule,
                    MatButtonModule
                ],
            })
            export class Material { }

            @Component({
              selector: 'app-root',
              templateUrl: './app.component.html',
              styleUrls: ['./app.component.css']
            })
            export class AppComponent {
              title = 'forms';
            }

AppRoutingModule.ts:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { CursoModule } from './curso/curso.module';

const routes: Routes = [
 { 
  path: '', pathMatch: 'full', redirectTo: 'curso'
 },
 { 
  path: 'curso', loadChildren: './curso/curso.module#CursoModule'
  }
];

@NgModule({
 imports: [RouterModule.forRoot(routes)],
 exports: [RouterModule]
})
export class AppRoutingModule { }

cursp-routing.module.ts:

import { CursosComponent } from './cursos.component';
import { RouterModule } from '@angular/router';
import { NgModule } from '@angular/core';
import { CursoListaComponent } from './curso-lista/curso-lista.component';

    const routes = [
    {
        path: '', component: CursoListaComponent
    }
    ]


 @NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
 })
 export class CursoRouting { }

Ответы [ 3 ]

10 голосов
/ 05 июля 2019

У меня была такая же ошибка - обновление Angular в проекте работает для меня (это новый проект только с Angular Material, несколькими простыми компонентами и простой маршрутизацией).

ng update @angular/cli @angular/core

https://update.angular.io/#7.2:8.0

Ошибка произошла после того, как я сделал:

npm install -S @angular/material @angular/cdk @angular/animations
npm uninstall @angular/core
npm install -S @angular/core

как решение для ошибки "экспорт" ɵɵinject "не найден в" @ angular / core " (выбрасывается после добавления Angular Material в новый проект).

Это работало, пока я не добавил маршрутизацию и не получил NullInjectorError: Нет провайдера для ViewportScroller . Но, как уже упоминалось в начале, обновление всего проекта до Angular v8 кажется решением.

1 голос
/ 17 июля 2019

извините, у меня та же проблема. Я и мой коллега обновили версию с угловой 7 до угловой 8, и у нас та же проблема.Почему ViewportScroller?Я не использую его и не нуждаюсь в нем, но у меня есть тот же текст в консоли: «NullInjectorError:» StaticInjectorError (AppModule) [RouterScroller -> ViewportScroller]: StaticInjectorError (Платформа: ядро) [RouterScroller -> ViewportScroller]: NullInjectorError: Нет провайдера для ViewportScroller! "

0 голосов
/ 04 июля 2019

Вы уже импортировали, как это?

Не забудьте также включить компонент

   RouterModule.forRoot([{ path: 'some-view', component: SomeViewComponent}],
      { anchorScrolling: 'enabled', scrollPositionRestoration: 'enabled'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...