【问题标题】:Events provider is deprecating. Using Redux or Observables for state in ionic apps事件提供程序正在弃用。在 ionic 应用程序中使用 Redux 或 Observables 获取状态
【发布时间】:2020-05-31 18:30:53
【问题描述】:

我一直在我的 ionic 应用程序中使用事件,我在一个页面中订阅,并在另一页面中发布事件。现在我看到一个警告,事件将随着 Observables 和 Redux 状态和效果而改变。 我主要使用事件来调用它之外的组件功能更改,所以我有一个组件,例如:

Component1.ts

this.events.subscribe('event:addValue1', (data: any) => {
this.valueName = 'VALUE1';
});

this.events.subscribe('event:addValue2', (data: any) => {
this.valueName = 'VALUE2';
});

在这个组件之外,我从任何页面调用发布方法,例如:

Page1.ts

this.events.publish('event:addValue1');

Page2.ts

this.events.publish('event:addValue2');

通过这个,我能够从任何其他页面更改 Component1.ts 之外的数据 (this.valueName),只需发布​​所需的事件。 我知道这听起来可能不是正确的方法,但这是我从任何页面对其外部的 Component1.ts 进行更改的唯一方法。

我现在已经改变了这一点,只是放置了单独的函数,然后我通过 ViewChild 组件名称来访问它们

@ViewChild('component') component: any;
....
this.component.functionAddValue1().

此外,如果我需要计算并从 Component1.ts 调用某些函数,我会通过 Angular NavigationExtras 发送其他参数,假设我导航到某个路线。 在此之前,我只是调用 events.publish,并且能够即时更改 Component1.ts。

【问题讨论】:

标签: ionic-framework redux observable ionic4 redux-observable


【解决方案1】:

创建事件服务。 在 EventService.ts 中:

    export class EventService {
    private dataObserved = new BehaviorSubject<any>('');
    currentEvent = this.dataObserved.asObservable();
    constructo(){}

    publish(param):void {
      this.dataObserved.next(param);
    }
   }

用于从示例 page1 发布事件:

    constructor(public eventService:EventService){}
updatePost(value){
this.eventService.publish({name:'post:updated',params:value});
} 

在第 2 页:

constructor(public eventService:EventService){
  eventService.currentEvent.subscribe(value=>{
if(value.name=='post:updated'){
//get value.name
}else if(value.name=='another:event'){
//get value or update view or trigger function or method...
}
 // here you can get the value or do whatever you want

});
}

【讨论】:

  • 如果我想在我的第一页中有 3 个事件怎么办。第 1 页也是我需要运行一些代码的地方,所以当我在第 2 页发布“事件名称”时,我需要知道在第 1 页中要执行的操作,因为所有 3 个事件都在做不同的事情和第 1 页中的代码。
  • 你为事件类型添加另一个主题行为,并在参数之前将它传递给发布方法,你得到第一个whick的值将是事件名称,当前事件将是数据
  • this.event.currentEvent.subscribe(data => { this.page1value === 'VALUE1'; });我在 Page1 中有 3 个不同的事件,就像这个一样,根据从 Page2 发布的事件,我需要发布它,因此更改我的 page1 中的 page1value。例如,其他事件将 page1value 更改为 VALUE2 和 VALUE3。我仍然不确定如何使用您的方法来做到这一点。
  • 例如你有 publish(name,param){this.dataObserved.next({name:name,params:param});} 当你得到 observable 时,你会得到值,你检查data.name==你想要什么然后得到它的价值......所有
  • 我理解这一点,但我仍然不确定它如何满足我的需求和状态管理。您的示例以以下方式工作:ionicframework.com/docs/v3/api/util/Events。我需要更多才能通过一个调用或一个发布方法从 page1 更改一组变量和函数。我不需要传递值,而是通过订阅在 page2 中获取该数据。我的需要是相反的方式,只使用在 page2 中发布,并在其中订阅与 page1 相关的所有功能集。
猜你喜欢
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 2019-03-29
  • 2018-05-13
  • 2019-07-19
  • 2020-05-08
  • 2016-04-26
相关资源
最近更新 更多