这是我将其子组件引用到主组件的组件
运行应用程序时,会抛出指向此组件选择器<app-new></app-new>
错误说:
'没有String的提供者! ;区域:;任务:Promise.then;值:错误:没有String的提供者!'
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-new',
template: `<h2>SOme New Compnent which uses interpolation as well</h2>
<h3>{{someProp}}</h3>`
})
export class CompyNewComponent implements OnInit {
public prop2: string;
public prop3: number;
constructor(private someProp: string) {
this.someProp = 'set throught the constuctor';
}
someMethod() {
console.log(this.someProp);
}
ngOnInit() {
this.someMethod();
console.log('this is inside the ngoninit life cylce hook');
}
}
//应用程序模块文件
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { NewComponent } from './new/new.component';
import { DirectDirective } from './direct.directive';
import { SomeComponent } from './compy/some.component';
import { CompyNewComponent } from './new compy/compy1.component';
@NgModule({
declarations: [
AppComponent,
NewComponent,
DirectDirective,
SomeComponent,
CompyNewComponent],
imports: [
BrowserModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
答案 0 :(得分:0)
我认为错误在于 - &gt; constructor(private someProp: string) {
this.someProp = 'set throught the constuctor';
}
在构造函数内部的角度中添加服务而不是像在反应中那样添加属性。
所以删除构造函数并添加
this.prop1 = 'something1';
this.prop2 = 'something2';
在ngOnInit()
编辑:import { CompyNewComponent } from './new compy/compy1.component';
也可能存在错误...更好地使用-
例如new-compy
答案 1 :(得分:0)
如果使用构造函数定义类,则可以在该构造函数中声明变量:
class MyClass {
constructor(public str: string, public value: number) {
}
}
class AnotherClass {
...
public myMethod(): void {
let obj = new MyClass("Hello World", 10);
....
}
}
但是,当您定义组件或服务时,构造函数由Angular调用,它需要具有注入元数据的参数,如本Angular documentation中关于依赖注入所述:
当Angular创建一个构造函数具有参数的类时 查找有关这些参数的类型和注入元数据,以便这样做 它可以注入正确的服务。
如果Angular无法找到该参数信息,则会引发错误。
如果类有一个,Angular只能找到参数信息 某种装饰者。虽然任何装饰者都会这样做,但是@Injectable() decorator是服务类的标准装饰器。