Angular material 我应该如何将数据从我的服务传递到快餐店组件?

Angular material 我应该如何将数据从我的服务传递到快餐店组件?,angular-material,angular6,angular2-services,subject,snackbar,Angular Material,Angular6,Angular2 Services,Subject,Snackbar,我有一个snackbar组件,我已经像这样创建了 import {Component, ViewEncapsulation, OnInit, OnDestroy} from '@angular/core'; import { MatSnackBar, MatSnackBarConfig, MatSnackBarHorizontalPosition, MatSnackBarVerticalPosition, } from '@angular/material'; import {

我有一个snackbar组件,我已经像这样创建了

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。然后我用subjectListener调用下一步,其中包含我想要传递的数据。我没有接到任何关于我的组件的电话。我不明白为什么?这是我的服务

从'@angular/core'导入{Injectable};
从'@angular/common/http'导入{HttpClient};
从'rxjs'导入{Subject};
从“../../../node_modules/@angular/Router”导入{Router,ActivatedRoute}”;
@注射的({
providedIn:'根'
})
导出类身份验证服务{
private mesageListener=新主题();
私有消息数据:对象;
getMessageListener(){
返回此.mesageListener.asObservable();
}
getMessageData(){
返回此.messageData;
}
createUser(电子邮件:字符串,密码:字符串){
const userData:AuthModel={
电邮:电邮,,
密码:密码
}
const requestPath=this.getModes()[`${this.navigatedFrom}`];
这是http.post(`http://localhost:3000/api/${requestPath}/signup`,userData)
.订阅(响应=>{
this.messageData={
消息:“注册成功。请立即登录!”,
动作:“好的,明白了。”
}
this.mesageListener.next(this.messageData);
});
}
}

尝试使用
新行为主体(空)用于mesageListener

您可以在此处查看有关主题和行为主题的更多详细信息:


在组件中,订阅可观察的值。应该行。

有人能帮我吗!!所以渴望有它的解决方案!!什么时候调用createUser()-方法?它是从另一个创建用户的组件调用的,然后我想通过snackbar将注册信息发送给用户!您需要注入HttpClient:constructor(私有http:HttpClient){}对不起,Dirk,我已经删除了这个构造函数,所以重点只放在我为snackbar编写的代码上。关键是,除了可观察的调用组件外,所有东西都在工作。侦听器上的.next方法在身份验证服务中被调用,但在snackbar组件上没有得到任何调用或更新。
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);
      });
  }

}