app.component.html
我有两个组分1)ResetPassword在同一路由器出口2)LoginComponent。
在成功重置密码。 我重定向到登录组件。 我如何通过从ResetPassword数据LoginComponent?
我试着用订阅的方法来做到这一点,但不工作。
有人可以帮助我解决这个问题。
login服务
export class LoginService{
private messageSource = new BehaviorSubject('');
currentMessage = this.messageSource.asObservable();
setResetPassword(message: string) {
this.messageSource.next(message)
}
}
LoginComponent
OnInit{
this._loginService.currentMessage.subscribe(message => {
if (message !== undefined && message !== "") {
this.toastr.info(message);
}
});
}
ResetComponent
OnInit(){
this._loginService.setResetPassword("Password Changed Successfully");
}
要通过组件之间的数据基本上我们用@Input
和@Output
,但在你的情况,我不认为这是不错的办法。
所以,你可以简单地传递你的message
作为查询参数字符串 (如果数据不是保密的 )从重置密码登录组件,然后显示按要求。
尝试在login服务下面的代码。
import { Injectable, EventEmitter} from "@angular/core";
@Injectable()
export class LoginService {
currentMessage = new EventEmitter();
setResetPassword(message: string) {
this.currentMessage.emit(message)
}
}
并移动ResetComponent代码提交功能。
resetPassword() {
this._loginService.setResetPassword("Password Changed Successfully");
}
谢谢。
更改的OnInit OT ngOnInit它为我工作
供您参考检查下面的代码
<div><a></a></div>
<div><b></b></div>
@Component({
selector: 'b',
template: `<input [(ngModel)]="data" />
<button (click)="update()">update</button> `,
})
export class B implements OnInit {
data
constructor(public loginService: LoginService) {
}
ngOnInit() {
}
update() {
this.loginService.update(this.data)
}
}
@Component({
selector: 'a',
template: `<h1> {{data}}</h1> `,
})
export class A implements OnInit {
data
constructor(public loginService: LoginService) {
}
ngOnInit() {
this.loginService.currentMessage.subscribe((data) => {
this.data = data;
})
}
}
@Injectable({
providedIn: "root"
})
export class LoginService {
private messageSource = new BehaviorSubject('');
currentMessage = this.messageSource.asObservable();
update(message: string) {
this.messageSource.next(message)
}
}
文章来源: how to pass data between one component to another which is on same router-outlet