Angular material 我应该如何将数据从我的服务传递到快餐店组件?
我有一个snackbar组件,我已经像这样创建了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 {
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);
});
}
}