Служба должна отправлять данные как объект - PullRequest
0 голосов
/ 15 января 2020

У меня есть служба, которая используется для отправки значений от SendComponent до ReceiveComponent .

SendComponent

export class SendComponent implements OnInit {

  message1: string;
  message2: string;

  constructor(private data: DataService) { }

  ngOnInit() {
   this.data.currentMessage1.subscribe(message => this.message1 = message);
   this.data.currentMessage2.subscribe(message => this.message2 = message);    
  }

  newMessageCreator() {
    this.data.changeMessage1("New value for message 1");        
    this.data.changeMessage2("New value for message 2");    
  }

}

ReceiveComponent

export class ReceiveComponent implements OnInit {
  message1: string;
  message2: string;
  constructor(private data: DataService) { }

ngOnInit() {
    this.data.currentMessage1.subscribe(message => this.message1 = message);
    this.data.currentMessage2.subscribe(message => this.message2 = message);    
  }    
} 

DataService

export class DataService {

      private messageSource1 = new BehaviorSubject('default message 1');
      private messageSource2 = new BehaviorSubject('default message 2');        

      public currentMessage1 = this.messageSource1.asObservable();
      public currentMessage2 = this.messageSource2.asObservable();      

      constructor() { }

      changeMessage1(message: string) {
        this.messageSource1.next(message)
      }

      changeMessage2(message: string) {
        this.messageSource2.next(message)
      }        
    }

Этот код работает. Но я предпочитаю, чтобы служба отправляла все сообщения от SendComponent до ReceiveComponent как объект ({message1: ..., message2: ...}), а не как отдельные значения. Не могли бы вы помочь мне с этим?

1 Ответ

1 голос
/ 16 января 2020

Не знаю, понимаю ли я, но, может быть, что-то вроде этого:

ОТПРАВИТЬ

export class SendComponent implements OnInit {
    messages: {message1:string,message2:string};

    constructor(private data: DataService) { }

    ngOnInit() {
       this.data.currentMessages.subscribe(messages => this.messages = 
        {...this.messages,...message});
    }

     newMessageCreator() {
         this.data.changeMessages({message1:"New value for message 1"});         
         this.data.changeMessages({message2:"New value for message 2"});         
         //or
         this.data.changeMessages({message1:"New value for message 1", message2:"New 
          value for message 2"});         
     }
 }

ПОЛУЧИТЬ

export class ReceiveComponent implements OnInit {
   messages: {message1:string,message2:string};
   constructor(private data: DataService) { }

   ngOnInit() {
      this.data.currentMessages.subscribe(message => this.messages = 
       {...this.messages,...messages});
   }    
} 

Служба DATE

 export class DataService {

     private messagesSource = new BehaviorSubject({message1:'default message 
                                                  1',message2:'default 2'});

     public currentMessages = this.messagesSource.asObservable();

     constructor() { }

     changeMessages(message: {message1:string,message2:string}) {
         this.messagesSource.next(message)
     }
}

Это не самое лучшее, но работает, я думаю:)

...