繁体   English   中英

Angular 6从服务中更新组件

[英]Angular 6 update a component from the service

我使用的是角度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的文章,但我不知道这是否是正确的方法以及如何删除元素。 你能帮助我吗? 谢谢

您可以将代理程序实例存储在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;
 }
}

我用下面的代码解决了,我不知道这是否是最好的代码:

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;
   }
}

然后在组件的客户库中,我有订阅和取消订阅的destroy方法:

this.componentService.agentChange.subscribe((agent:Agent)=>{
     //on success instruction
    })

ngOnDestroy() {
    this.componentService.agentChange.unsubscribe();
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM