Angular2 call method of other component

前端 未结 4 1811
故里飘歌
故里飘歌 2020-12-14 11:35

I have an Angular2 app in which I created an Header component, that\'s rendered in my main App component.

Now, I have an other Form component that should have its su

4条回答
  •  南方客
    南方客 (楼主)
    2020-12-14 12:10

    You can create one service which is shared between your header and form component in which you can define Observable so that you can subscribe to that Observable from form and perform some action when you receive some value from header.

    common.service.ts

    import { Injectable, Inject } from '@angular/core';
    import { Subject }    from 'rxjs/Subject';
    @Injectable()
    export class CommonService {
      private notify = new Subject();
      /**
       * Observable string streams
       */
      notifyObservable$ = this.notify.asObservable();
    
      constructor(){}
    
      public notifyOther(data: any) {
        if (data) {
          this.notify.next(data);
        }
      }
    }
    

    header.component.ts

    import { Component, OnInit, OnDestroy } from '@angular/core';
    import { Subscription } from 'rxjs/Subscription';
    
    import { CommonService } from './common.service';
    
    @Component({
      selector   : 'header',
      templateUrl : './header.html'
    })
    export class HeaderComponent implements OnInit, OnDestroy {
      constructor( private commonService: CommonService ){
      }
    
      ngOnInit() {       
      }
    
      onSubmit(){
        // this method needs to be called when user click on submit button from header
        this.commonService.notifyOther({option: 'onSubmit', value: 'From header'});
      }
    }
    

    form.component.ts

    import { Component, OnInit, OnDestroy } from '@angular/core';
    import { Subscription } from 'rxjs/Subscription';
    
    import { CommonService } from './common.service';
    
    @Component({
      selector   : 'form',
      templateUrl : './form.html'
    })
    export class FormComponent implements OnInit, OnDestroy {
      private subscription: Subscription;
      constructor( private commonService: CommonService ){
      }
    
      ngOnInit() {
        this.subscription = this.commonService.notifyObservable$.subscribe((res) => {
          if (res.hasOwnProperty('option') && res.option === 'onSubmit') {
            console.log(res.value);
            // perform your other action from here
    
          }
        });
      }
    
      ngOnDestroy() {
        this.subscription.unsubscribe();
      }
    }
    

提交回复
热议问题