是否可以在角度为2的构造函数中声明变量

时间:2017-11-18 14:33:17

标签: angular angular-components

这是我将其子组件引用到主组件的组件 运行应用程序时,会抛出指向此组件选择器<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 { }

2 个答案:

答案 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是服务类的标准装饰器。