Как передать данные из моего сервиса в закусочную? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть компонент закусочной, который я создал следующим образом!

import {Component, ViewEncapsulation, OnInit, OnDestroy} from '@angular/core';
import {
  MatSnackBar,
  MatSnackBarConfig,
  MatSnackBarHorizontalPosition,
  MatSnackBarVerticalPosition,
} from '@angular/material';
import { Subscription } from 'rxjs';


import { AuthenticationService } from "../../services/authentication.service";


@Component({
  selector: 'snack-message',
  templateUrl: './messages.component.html',
  styleUrls: [ './mesaages.component.scss' ],
  encapsulation: ViewEncapsulation.None
})

export class SnackBarMessages implements OnInit, OnDestroy {
  action: boolean = true;
  setAutoHide: boolean = true;
  autoHide: number = 2000;
  horizontalPosition: MatSnackBarHorizontalPosition = 'center';
  verticalPosition: MatSnackBarVerticalPosition = 'bottom';
  private showMessageSub: Subscription;
  messageData: object;

  addExtraClass: boolean = false;

constructor(public snackBar: MatSnackBar, public authenticationService: AuthenticationService) {

}

ngOnInit() {
  this.messageData = this.authenticationService.getMessageData();
  this.showMessageSub = this.authenticationService.getMessageListener()
      .subscribe(data => {
          this.messageData = data;
      });
   this.openMessageSnackBar(this.messageData);
}

 openMessageSnackBar(data) {
  let config = new MatSnackBarConfig();
  config.verticalPosition = this.verticalPosition;
  config.horizontalPosition = this.horizontalPosition;
  config.duration = this.setAutoHide ? this.autoHide : 0;
  this.snackBar.open(data.message, data.action, config);
 }

 ngOnDestroy() {
   if (this.showMessageSub) {
     this.showMessageSub.unsubscribe();
   }
 }
}

Я добавил тему и создал подписку, которая прослушивает messageListener в моей службе аутентификации. Затем я вызываю Next с моим subjectListener с данными, которые я хочу передать. Я не получаю никакого вызова на моем компоненте. Я не понимаю почему? Это мой сервис!

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Subject } from 'rxjs';
import { Router, ActivatedRoute } from '../../../node_modules/@angular/router';
@Injectable({
  providedIn: 'root'
})

export class AuthenticationService {
  private mesageListener = new Subject<object>();
  private messageData: object;

getMessageListener() {
    return this.mesageListener.asObservable();
  }

getMessageData() {
    return this.messageData;
  }


createUser(email: string, password: string) {
    const userData: AuthModel = { 
      email: email,
      password: password
    }
    const requestPath = this.getModes()[`${this.navigatedFrom}`];
    this.http.post(`http://localhost:3000/api/${requestPath}/signup`,userData)
      .subscribe(response => {
        this.messageData = {
          message: 'Sign Up Successful. Please Login now!',
          action: 'Ok! Got it.'
        }
        this.mesageListener.next(this.messageData);
      });
  }

}

1 Ответ

0 голосов
/ 02 ноября 2018

Попробуйте использовать new BehaviorSubject<object>(null); для mesageListener.

Вы можете увидеть более подробную информацию о субъекте и поведении субъекта здесь: angular2-разница-между-поведением-субъектом-и-наблюдаемым /

В компоненте подпишитесь на значение Observable. Это должно работать.

...