Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Uncaught (in promise): Error: No provider for String

I am new to angular2 and i am stuck with this error. I have a class like this

@Injectable()
export class VehicleDetails {
    constructor(private policynumber: string, private vinnumber: string) {
        this.policyNumber = policynumber,
            this.vinNumber = vinnumber
    }
    policyNumber: string;
    vinNumber: string;
}

and another class like this

export class Policy {
    constructor() {
    }
    emailAddress: string;
    vehicleDetails: VehicleDetails[]
}

i have imported my class in the modules like this

import { Policy } from './models/Policy';
import { VehicleDetails } from './models/VehicleDetails';
@NgModule({
  declarations: [
    LienholderComponent,
    AppComponent,
    PolicyVehicleComponent
  ],
  imports: [
    RouterModule.forRoot(
      APP_ROUTES,
      { enableTracing: true } // <-- debugging purposes only
    ),
    BrowserModule,
    FileUploadModule,
    ReactiveFormsModule,
    HttpModule
  ],
  providers: [Policy, VehicleDetails],
  bootstrap: [AppComponent]
})
export class AppModule { }

when i comment my constructor in the VehicleDetails class everything works fine, but when i use the contructor, i start to get this error. how to resolve this error, i have two string parameter in the constructor because i would like to add the values dynamically .

my error is this

enter image description here

What i want to achieve constructing the VehicleDetails class like this is

this.policy.emailAddress='[email protected]';
    this.policy.vehicleDetails.push(new VehicleDetails('valueA1','valueA2'));
    this.policy.vehicleDetails.push(new VehicleDetails('valueB1','valueB2'));
    this.policy.vehicleDetails.push(new VehicleDetails('valueC1','valueC2'));

so, i am getting the value dynamically and i want to bind the values to the model as explained in the above code

like image 813
Lijin Durairaj Avatar asked Aug 16 '17 10:08

Lijin Durairaj


1 Answers

DI can't create an instance of VehicleDetails because it doesn't have any information about what to pass for private policynumber: string, private vinnumber: string

What you can do is to use the @Inject() decorator

constructor(@Inject('policy') private policynumber: string, @Inject('vin') private vinnumber: string) {

and provide the values like

providers: [Policy, VehicleDetails, {provide: 'policy', useValue: 'abc'}, {provide: 'vin', useValue: 'def'}],
like image 57
Günter Zöchbauer Avatar answered Oct 17 '22 04:10

Günter Zöchbauer