【问题标题】:share data Service with duplicated component与重复组件共享数据服务
【发布时间】:2019-05-07 23:39:46
【问题描述】:

我有一个重复的组件,它使用共享服务并使用主题行为。

这是我的组件

export class HelloComponent  {
   message:string;
   printedMessage:string

  constructor(private data: DataService, private router : Router) { }

  ngOnInit() {
    this.message = this.data.messageSource.value;
  }

  updateService(){
    this.data.changeMessage(this.message);
    this.printedMessage=this.data.messageSource.value
    //this.data.currentMessage.subscribe(message => this.message = message)
  }

  navigateToSibling(){
    this.router.navigate(['/sibling']);
  }
}

数据服务

export class DataService {

  messageSource = new BehaviorSubject<string>("default message");
  constructor() { }

  changeMessage(message: string) {
    this.messageSource.next(message)
  }
}

父组件

<hello></hello>
<hello></hello>

这是stackblitz Demo

我希望当我对组件 1 进行更改时,复制的组件也会得到此更改。 (当我点击保存时,我会在两个组件上触发save() 函数see here

实际上,当我更改第一个组件中的输入时,它只会在此组件中打印,而不是在副本中。

组件是否使用了共享 data.service 的不同实例?如果是,如何使它们使用相同的?

【问题讨论】:

  • 可以直接在模板中添加:{{data?.messageSource | async}}

标签: javascript angular angular-services


【解决方案1】:

您需要在消费 HelloComponent 中订阅您的数据服务的 observable。

ngOnInit() {
    this.message = this.data.messageSource.value;
    this.data.messageSource.subscribe(message => this.printedMessage = message); // Subscribing to changes here
}

【讨论】:

  • 您的解决方案正在运行,我正在寻找的是当我单击第一个组件时在第二个组件上运行函数updateService()
  • @HamzaHaddad 好吧,那你做错了......你真的应该利用 observables。将BehaviorSubject 分配给消息并使用{{message | async}}。对于其他值使用类似的方法。
猜你喜欢
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2017-04-15
  • 2017-02-21
  • 2018-01-19
  • 2018-10-12
相关资源
最近更新 更多