通过设置页面更新跨应用程序的离子组件视图

Update ionic component view across app through settings page

我正在开发一个应用程序,它有一个与周围环境温度相关的离子组件。此详细信息是从我创建的 TemperatureService 中获取的。

现在,在设置选项卡中,我需要能够在摄氏度和华氏度之间进行切换,并且此更改应反映在应用程序中使用该组件的所有地方。

页面的 HTML 文件包含这样的组件:

<ion-col> 
        <app-temperature-meter></app-temperature-meter>
</ion-col>

并以这种方式从服务中获取温度:

ngOnInit() {
    this.loadedEnvironment = this.currentPlace.getEnvironment();
    this.temperatureToShow = this.tempCtrl.toCurrentUnit(this.loadedEnvironment.currTemp);
  }

其中 tempCtrl 是服务,toCurrentUnit() 将输入温度转换为当前单位(摄氏度或华氏度)的温度。

这里的问题是,由于 temperatureToShow 是在 ngOnInit 期间确定的,因此当我在设置页面中更改设置时,它不会动态更改。

已测试: 由于此组件在多个页面上使用,我检查了服务和 ngOnInit 功能的正确运行。它们似乎有效(即,如果第一次加载页面并调用 ngOnInit,则显示的温度采用当前所需的单位)

期望: 组件是否有类似于 ionViewWillEnter 的东西,这样只要它们出现在屏幕上,我就可以从服务中检查当前温度单位并相应地更改视图。

我认为您可以通过使用事件发射器发布消息来实现您的目标。如果您更改设置页面中的设置,请在活动中发布一条消息。该组件将订阅消息并设置新值。

这里有一个事件发射器的例子:

import { Events } from 'ionic-angular';

// first page (publish an event when a user is created)
constructor(public events: Events) {}
createUser(user) {
  console.log('User created!')
  this.events.publish('user:created', user, Date.now());
}


// second page (listen for the user created event after. 
function is called)
    constructor(public events: Events) {
  events.subscribe('user:created', (user, time) => {
    // user and time are the same arguments passed in. 
`events.publish(user, time)`
    console.log('Welcome', user, 'at', time);
  });
}

我认为通过这种方法可以解决更新问题。