oop - How to pass values from one class's method to another class's method in Typescript? -


i'm new object oriented programming , assuming should easy concept seasoned oo programmers, i'm struggling it.

in angular2 app have httpservice class shown below:

http.service.ts

@injectable() export class httpservice {     constructor(private http: http) { }     addleaf(parentid, label, name){           var headers = new headers();         headers.append('content-type', 'application/json');         return this.http.post('http://localhost:8000/addleaf/',          {'parentid':parentid,'label':label, 'name':name},         { headers: headers })         .map(res => res).subscribe();           } 

i try call method within class below:

leaf.ts

import { httpservice } './http.service';  export class leaf{ name: string; ... http: http;  // unsure these 2 lines private httpservice: httpservice = new httpservice(this.http) constructor(input){     this.name = input.name; ... add(){     //what should go here?     this.httpservice.addleaf(this.id, this.label, this.name);      //error -> cannot read property 'post' of undefined } 

reading this, tried creating instance of httpservice class error post function not exist. no luck putting httpservice in constructor.

i call method in html this:

(click)="leaf.add()" 

edit: following @peeskillet's answer modified leaf.ts , added leaf.component.ts shown:

leaf.ts

export class leaf{     name: string;     ...     constructor(input){         this.name = input.name;         ...     add(){         //what should go here?     } } 

leaf.component.ts

@component({     providers: [httpservice],  })  export class leafcomponent {     leaf: leaf;     constructor(private httpservice: httpservice) {         this.httpservice.addleaf(this.leaf.id, this.leaf.type, this.leaf.name)      } } 

service works fine if write pre-defined strings in place of params, still not sure how can pass parameters of clicked leaf this.

with angular, use dependency injection , inversion of control. means not create service ourselves, let angular create it. ask service, angular resolve dependencies service has. take example

@injectable() class service {   constructor(private http: http) {} } 

here, service has dependency in http. http not can grab out of thin air. can't do

let service = new service(new http()); 

http dependent on other services. here constructor looks like

class http {   constructor(backend: connectionbackend, options: requestoptions) {}  } 

you might think maybe can instantiate connectionbackend , requestoptions

new http(new connectionbackend(), new requestoptions())` 

but can't either, connectionbackend has required dependencies. it's reason use inversion of control. add service container, , when ask service, angular look service, see requires, http, , see http requires connectionbackend , requestoptions, etc, , angular create items, looking in registry items , putting them voltron. give service, populated.

so add our service container, first need add injectable decorator on service

@injectable() class service {   constructor(private http: http) {} } 

then need add @ngmodule.providers

@ngmodule({   imports: [ httpmodule ],   providers: [ service ] }) class appmodule {} 

now, whenever ask service, populated http (which in httpmodule).

how ask service through constructor of either service or component (directive, pipe, etc)

@component({ }) class mycomponent {   constructor(private service: service) {} } 

by seeing service type constructor argument, angular knows service in container, pass through us. basics of dependency injection , inversion of control.

in case of leaf. if is meant service, can same

@injectable() class leaf {   constructor(private service: service) {} }  @ngmodule({   imports: [ httpmodule ],   providers: [ leaf, service ] }) class appmodule {} 

if don't want add leaf provider, don't need to. do

@component({}) class mycomponent {   leaf: leaf;    constructor(private service: service) {     this.leaf = new leaf(service);   } } 

Comments

Popular posts from this blog

java - SSE Emitter : Manage timeouts and complete() -

jquery - uncaught exception: DataTables Editor - remote hosting of code not allowed -

java - How to resolve error - package com.squareup.okhttp3 doesn't exist? -