我正在使用角度6,并且在调用服务方法时需要更新组件。我有一个变量agent
,可以从html保留所选代理,因此可以从多个组件中获取此变量,并且可以从特定按钮中删除该代理。
当我调用deleteAgent时,我必须更新接口,因此我需要一种“告诉”代理已删除组件的方法。
export class ComponentService {
private agent : Agent
constructor() { }
/************ AGENT MANAGEMENT *****************/
get getAgent(){
return this.agent;
}
setAgent(agent: Agent){
this.agent = agent;
}
deleteAgent(){
this.agent = null;
//inform the component about the change
}
}
我阅读了有关ReplaySubject的信息,但我不知道这是否是正确的方法以及如何删除元素。你能帮助我吗?谢谢
答案 0 :(得分:1)
您可以将代理实例存储在Observable中,然后在组件中订阅该Observable。
export class ComponentService {
private _agent = Subject<Agent>();
constructor() { }
/************ AGENT MANAGEMENT *****************/
get agent(){
return this._agent.asObservable();
}
set agent(agent: Agent){
this._agent.next(agent);
}
deleteAgent(){
this.agent = null;
}
}
答案 1 :(得分:-1)
我已解析此代码,不知道这是否是最好的代码:
export class ComponentService {
private agent: Agent;
// Observable navItem source
agentChange = new ReplaySubject<Agent>(1);
constructor() { }
/************ AGENT MANAGEMENT *****************/
get getAgent(){
return this.agent;
}
setAgent(agent: Agent){
this.agent = agent;
}
deleteAgent(){
this.agentChange.next(this.agent);
this.agent = null;
}
}
然后在组件的客户仓库中,我有subscribe和unsubscribe进入destroy方法:
this.componentService.agentChange.subscribe((agent:Agent)=>{
//on success instruction
})
ngOnDestroy() {
this.componentService.agentChange.unsubscribe();
}