首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NullInjectorError: InjectionToken MatDialogData没有提供程序

NullInjectorError: InjectionToken MatDialogData没有提供程序
EN

Stack Overflow用户
提问于 2019-09-18 23:48:17
回答 3查看 21.2K关注 0票数 15

在我的Angular应用程序上运行jasmine测试时,我得到了这个错误。

代码语言:javascript
运行
复制
Error: StaticInjectorError(DynamicTestModule)[MyEditDialogComponent -> InjectionToken MatDialogData]: 
  StaticInjectorError(Platform: core)[MyEditDialogComponent -> InjectionToken MatDialogData]: 
    NullInjectorError: No provider for InjectionToken MatDialogData!
error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'MyEditDialogComponent', InjectionToken MatDialogData ], ngDebugContext: DebugContext_({ view: Object({ def: Object({ factory: Function, nodeFlags: 33669121, rootNodeFlags: 33554433, nodeMatchedQueries: 0, flags: 0, nodes: [ Object({ nodeIndex: 0, parent: null, renderParent: null, bindingIndex: 0, outputIndex: 0, checkIndex: 0, flags: 33554433, childFlags: 114688, directChildFlags: 114688, childMatchedQueries: 0, matchedQueries: Object({  }), matchedQueryIds: 0, references: Object({  }), ngContentIndex: null, childCount: 1, bindings: [  ], bindingFlags: 0, outputs: [  ], element: Object({ ns: '', name: 'app-edit-ban-dialog', attrs: [  ], template: null, componentProvider: Object({ nodeIndex: 1, parent: <circular reference: Object>, renderParent: <circular reference: Object>, bindingIndex: 0, outputIndex: 0, checkIndex: 1, flags: 114688, childFlags: 0, directChildFlags: 0, childMatchedQueries: 0, matchedQueries: Object, matchedQueryIds: 0 ...
Error: StaticInjectorError(DynamicTestModule)[MyEditDialogComponent -> InjectionToken MatDialogData]: 
  StaticInjectorError(Platform: core)[MyEditDialogComponent -> InjectionToken MatDialogData]: 
    NullInjectorError: No provider for InjectionToken MatDialogData!

我正在我的组件中导入:

代码语言:javascript
运行
复制
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';

在组件构造函数中,我将数据注入到对话框中:

代码语言:javascript
运行
复制
 @Inject(MAT_DIALOG_DATA) public data: {
        myData : MyData
    }

在我要导入的组件的karma jasmin规范中:

代码语言:javascript
运行
复制
import {
    MatFormFieldModule,
    MatInputModule,
    MatDialogModule,
    MatDialogRef,
    MAT_DIALOG_DATA,
    MatButtonModule,
    MatRadioModule,
    MatSelectModule
} from '@angular/material';

在组件的karma/jasmine规范中,导入和提供beforeEach

代码语言:javascript
运行
复制
 beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [ MyFormComponent ],
        imports: [
            MatFormFieldModule,
            MatInputModule,
            MatDialogModule,                               
        ],
        providers: [
            { provide: MatDialogRef, useValue: {} },
            { provide: MAT_DIALOG_DATA, useValue: { myData: MyData } }
        ]
    }).compileComponents();
}));

我尝试过这些答案,但它们不能解决问题This This

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-23 23:53:00

在编辑对话框组件中,我将数据对象传递给close方法。我删除了它,错误也就消失了。

更改了此设置:

代码语言:javascript
运行
复制
this.dialogRef.close(myData);

要这样做:

代码语言:javascript
运行
复制
 this.dialogRef.close();
票数 1
EN

Stack Overflow用户

发布于 2020-04-02 02:13:09

在我的例子中,我导入了指令MatDialogModule、MAT_DIALOG_DATA和MatDialogRef

代码语言:javascript
运行
复制
import { MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';

然后在beforeEatch()中:

代码语言:javascript
运行
复制
imports: [ MatDialogModule],
providers: [
    { provide: MAT_DIALOG_DATA, useValue: {} },
    { provide: MatDialogRef, useValue: {} }
  ]
票数 34
EN

Stack Overflow用户

发布于 2019-09-19 00:46:44

尝试从karma jasmin规范中删除MatDialogRef和MAT_DIALOG_DATA,您需要导入的组件如下所示:

代码语言:javascript
运行
复制
imports: [
    DynamicModule.withComponents([YOUR_DIALOG_COMPONENT])
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57996566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档