【发布时间】:2018-09-26 10:17:10
【问题描述】:
我已经建立了以下方式来建立组件之间的通信。
1.@input 和 @output 装饰器(但仅限于父子) 对于兄弟组件
2.使用 getter 和 setter 方法创建服务(但限制是如果我们刷新使用服务数据的页面,数据将变为空)
3.使用cookies(限制:如果我保存一个数组,它会以字符串的形式存储。有时很难取回原始数据类型)
4.使用本地存储
除了这些之外,还有其他方法可以在 2 个组件之间进行通信吗?我已经使用了以上所有内容。建议我更多方法。
5.我使用subject应用了以下方式。但不知道为什么我没有得到输出
服务
import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs';
@Injectable({ providedIn: 'root' })
export class MessageService {
private subject = new Subject<any>();
sendMessage(message: string) {
this.subject.next({ text: message });
}
clearMessage() {
this.subject.next();
}
getMessage(): Observable<any> {
return this.subject.asObservable();
}
}
接收组件
import { MessageService } from '../services/message.service';
import { Subscription } from 'rxjs';
export class detailComponent implements OnInit, OnDestroy {
message: any;
subscription: Subscription;
constructor(private messageService: MessageService) {
this.subscription = this.messageService.getMessage().
subscribe(message => {
this.message = message;
console.log("Message");
console.log(this.message);
});
}
发送组件
import { MessageService } from '../services/message.service';
export class AlertComponent implements OnInit {
sendMessage(): void {
// send message to subscribers via observable subject
this.messageService.sendMessage('Message from alert Component to
details Component!');
}
clearMessage(): void {
// clear message
this.messageService.clearMessage();
}
}
但是这段代码不起作用。
【问题讨论】:
-
状态管理库github.com/ngrx/platform呢?
-
认为你几乎涵盖了 localStorage 旁边的所有值得注意的东西,那里有一个 sessionStorage。它的工作原理相同,但只绑定到一个选项卡而不是整个浏览器。
-
您也可以在 Service 中使用 EventEmitter 并在您的组件中使用它来发出和订阅它。
-
@Swoox ,是的,但最后一个使用服务的人不起作用。帮我解决这个问题。谢谢
-
@SarthakAggarwal 如果可能的话,你能给我一些示例代码吗?
标签: angular angular-components