2017-11-18 1 views
0

Dies ist die Komponente zu erklären ist, ich zu sein eine untergeordnete Komponente auf die Hauptkomponente beziehe mich auf, wenn die Anwendung ausgeführt wird, wird ein Fehler ausgelöst dieser Komponenten Selektor zeigt <app-new></app-new>ist es möglich, Variable in einem Konstruktor in Winkel 2

Fehler sagt:

'No provider for String! ; Zone: ; Task: Promise.then ; Value: Error: No provider for 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'); 
    } 

} 

// App Module

Datei
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

gibt es einen Raum, in dem Ordnernamen Das ist der Grund, warum der Raum – SONGSTER

+0

Es scheint die Tatsache zu sein, dass Sie über den Konstruktor eine 'Zeichenfolge' in die Komponente injizieren. Was passiert, wenn du das herausnimmst? –

+0

Wenn ich den Konstruktor entferne, verschwindet der Fehler – SONGSTER

Antwort

0

ich denke, der Fehler liegt hier ->constructor(private someProp: string) { this.someProp = 'set throught the constuctor'; }

in eckigen innerhalb eines Konstruktors hinzufügen Sie Dienste nicht Eigenschaften wie Sie in reagieren.

So den Konstruktor entfernen und this.prop1 = 'something1'; this.prop2 = 'something2';

innerhalb des ngOnInit()

EDIT hinzufügen: import { CompyNewComponent } from './new compy/compy1.component'; dort könnte es auch ein Fehler sein ... eine bessere Nutzung - zum Beispiel new-compy

+0

suchen, aber wir können Variablen im Konstruktor deklarieren, oder? wie dieser 'Konstruktor (private someprop: string)' habe ich es vorher gemacht, es hatte keinen Fehler. – SONGSTER

+0

Was ist der Grund, warum Sie nicht Variablen innerhalb des Konstruktors in eckigen – SONGSTER

+0

deklarieren, was wir im Konstruktor hinzufügen, sind Dienste (Singletons) – DrNio

0

Wenn Sie ein definieren Klasse mit einem Konstruktor können Sie Variablen in diesem Konstruktor deklarieren:

class MyClass { 
    constructor(public str: string, public value: number) { 
    } 
} 

class AnotherClass { 
    ... 
    public myMethod(): void { 
     let obj = new MyClass("Hello World", 10); 
     .... 
    } 
} 
Jedoch

, wenn Sie eine Komponente oder einen Service definieren, wird der Konstruktor von Angular genannt, die Parameter mit Injektions Metadaten erwartet, wie in diesem Angular documentation über Dependency Injection erwähnt:

When Angular creates a class whose constructor has parameters, it looks for type and injection metadata about those parameters so that it can inject the right service.

If Angular can't find that parameter information, it throws an error.

Angular can only find the parameter information if the class has a decorator of some kind. While any decorator will do, the @Injectable() decorator is the standard decorator for service classes.

Verwandte Themen