【问题标题】:NullInjectorError: No provider for StringNullInjectorError:没有字符串的提供者
【发布时间】:2018-06-14 18:24:38
【问题描述】:

在我的类中向构造函数添加字符串参数后,我在浏览器中遇到错误:

我的班级定义如下:

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

import { MatrixComponent } from '../matrix/matrix.component';

@Component({
  selector: 'app-player',
  templateUrl: './player.component.html',
  styleUrls: ['./player.component.css']
})
export class PlayerComponent implements OnInit {
    private userName: string;

    constructor(private name: string) {
        this.userName = name;
        this.discovered = 0;
        this.matrix = new MatrixComponent();
    }

    ngOnInit() {
    }
}

我正在另一个类的构造函数中创建对象:

var player1 = new PlayerComponent("Me");

我认为可以在构造函数中传递参数,对吧?我的代码有什么问题?

【问题讨论】:

  • 在另一个类的构造函数中创建对象 - 你不应该这样做。它是一个组件,而不是某个通用类。它由 Angular 编译器实例化。目前尚不清楚您要实现什么目标,但它不应该那样工作。

标签: angular typescript


【解决方案1】:

this 问题中所述,

@Component 装饰器告诉angular,它不是一个普通的typescript class,而是一个Angular Component

因此,要使其工作,您必须告诉它string 是您的组件的provider,因为它希望构造函数参数是提供者(或者在组件的metadata 中声明或在模块中)。

string 无法工作,因为它不是已知的 Angular 2 提供程序(除非您创建名称为 string 的服务)。

这解释了为什么我们可以在普通类中创建这类构造函数(string 作为参数),但不允许在 Angular 组件中创建。

我希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 2019-02-02
    • 2019-11-16
    • 2021-01-20
    • 2019-06-25
    • 2018-09-19
    • 2018-05-02
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多