【问题标题】:Error: No provider for ChildrenOutletContexts [duplicate]错误:没有 ChildrenOutletContexts 的提供者 [重复]
【发布时间】:2017-12-02 09:16:08
【问题描述】:

我不能以任何方式使用 Angular 5 的角度/材料。 我关注了这个simple Tutorial,但是每当我在组件 HTML 中插入一些材料标签时,网页就会变成空白。

Angular CLI 在使用ng serve 时没有显示任何问题

依赖关系:

"dependencies": {
    "@angular/animations": "^5.0.5",
    "@angular/cdk": "^5.0.0-rc.2",
    "@angular/common": "^5.0.0",
    "@angular/compiler": "^5.0.0",
    "@angular/core": "^5.0.0",
    "@angular/forms": "^5.0.0",
    "@angular/http": "^5.0.0",
    "@angular/material": "^5.0.0-rc.2",
    "@angular/platform-browser": "^5.0.0",
    "@angular/platform-browser-dynamic": "^5.0.0",
    "@angular/router": "^5.0.0",
    "core-js": "^2.4.1",
    "hammerjs": "^2.0.8",
    "rxjs": "^5.5.2",
    "zone.js": "^0.8.14"
  },
  "devDependencies": {
    "@angular/cli": "1.5.5",
    "@angular/compiler-cli": "^5.0.0",
    "@angular/language-service": "^5.0.0",
    "@types/jasmine": "~2.5.53",
    "@types/jasminewd2": "~2.0.2",
    "@types/node": "~6.0.60",
    "codelyzer": "^4.0.1",
    "jasmine-core": "~2.6.2",
    "jasmine-spec-reporter": "~4.1.0",
    "karma": "~1.7.0",
    "karma-chrome-launcher": "~2.1.1",
    "karma-cli": "~1.0.1",
    "karma-coverage-istanbul-reporter": "^1.2.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.1.2",
    "ts-node": "~3.2.0",
    "tslint": "~5.7.0",
    "typescript": "~2.4.2"
  }

app.component.html:

<button mat-button>My Button</button>

<router-outlet></router-outlet>

ma​​terial.module.ts:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MatButtonModule } from '@angular/material';

@NgModule({
  imports: [MatButtonModule],
  exports: [MatButtonModule],
})
export class MaterialModule { }

app.module.ts:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import {MaterialModule} from './material.module';
import { AppComponent } from './app.component';
import {RouterModule} from '@angular/router';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    MaterialModule,
    RouterModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

控制台窗口错误:

【问题讨论】:

  • 浏览器的控制台窗口有什么问题吗?
  • 感谢提醒,问题已更新

标签: angular angular-material


【解决方案1】:

错误与材质模块完全无关。

在使用&lt;router-outlet&gt; 指令之前需要做两件事:

  1. 导入RouterModule(或它的任何“版本” 由forRootforChildren 方法生成)到模块中 声明使用该指令的组件。
  2. 必须调用RouterModuleforRoot 方法。否则指令所要求的服务不会被初始化。

所以基本上,更改以下内容:

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    MaterialModule,
    RouterModule.forRoot([])
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

正如其他用户所说,您并没有真正配置任何路由,因此没有必要使用&lt;router-outlet&gt;

这基本上是No provider for ChildrenOutletContexts (injectionError) 的副本(通过在谷歌中搜索错误消息找到它,第一个结果)。下次在创建问题之前做一些研究。

【讨论】:

    【解决方案2】:

    问题不在于 Angular-material,而在于 RouterModule。导入并添加到imports数组中。

    import {RouterModule} from '@angular/router';
    
    @NgModule({
      declarations: [
        AppComponent
      ],
      imports: [
        BrowserModule,    
        BrowserAnimationsModule,
    
        RouterModule,                   //<=======add RouterModule
    
        MaterialModule
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    

    【讨论】:

    • 没用,问题已更新
    • 你是认真的有多条路线,还是只是在 html 中使用router-outlet
    • 我是 Angular 的初学者,我只是在关注演示
    • 如果到目前为止,您还没有使用路由器,建议您从 HTML 中删除 router-outlet 标记。这应该可以解决问题。
    • 是的,谢谢,它做到了
    猜你喜欢
    • 2019-11-16
    • 1970-01-01
    • 2022-11-24
    • 2017-12-22
    • 2018-04-24
    • 2017-03-08
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    相关资源
    最近更新 更多