Home > Software design >  Angular - Communication between unrelated components with return value
Angular - Communication between unrelated components with return value

Time:08-31

I´m trying to restructure my project and for that I´m working on how to communicate between components that are not-related and also wait for a return value from the called function.

So let´s say I have a component1 and a function1() and also a component2 and a function2(). In between stands the component.service.

component1:

import { Component, OnInit } from '@angular/core';
import { ComponentService } from '../component.service';

@Component({
  selector: 'component1',
  template: ''
})
export class Component1 implements OnInit {
    
  constructor() {}

  ngOnInit() {
    
  }

  function1() {
    //do something
    
    let parameter: any = "some Parameter";
    let returnValue = function2(parameter);

    //do something else
  }

}

component2:

import { Component, OnInit } from '@angular/core';
import { ComponentService } from '../component.service';

@Component({
  selector: 'component2',
  template: ''
})
export class Component2 implements OnInit {
    
  constructor() {}

  ngOnInit() {
    
  }

  function2(parameter: string) {
    //do something
    
    return parameter   "did something with it";
  }

}

componentService:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class ComponentService{

  constructor() { }

  //???
}

How can I achieve this structure so function1() can work with the returned Value from function2(). How do I have to build the service?

Thanks in advance.

CodePudding user response:

you'll never call a function that is inside component2 from component1. this is what the service was created for. every data/logic you need for both components you store it in a service and inject the service to both components.

    @Injectable({
      providedIn: 'root'
    })
    export class ComponentService{
    
      constructor() { }
    
      getSomeData() {
        return '' // return what do you need
 }
    }

and every component:

  @Component({
      selector: 'component2',
      template: ''
    })
    export class Component2 implements OnInit {
    
  constructor(private componentService: ComponentService) {}

  ngOnInit() {
    
  }

  function2(parameter: string) {
    //do something
    
    return this.componentService.getSomeData()
  }

}
  • Related