Ionic framework 事件提供程序正在弃用。在ionic应用程序中对状态使用Redux或Observable

Ionic framework 事件提供程序正在弃用。在ionic应用程序中对状态使用Redux或Observable,ionic-framework,redux,observable,ionic4,redux-observable,Ionic Framework,Redux,Observable,Ionic4,Redux Observable,我一直在我的ionic应用程序中使用事件,我在一个页面中订阅,在另一个页面中发布事件。现在我看到一个警告,事件将随着可观察性和重复状态和效果而改变。 我主要使用事件来调用它之外的组件功能更改,因此我有一个组件,例如: 组件1.ts this.events.subscribe('event:addValue1', (data: any) => { this.valueName = 'VALUE1'; }); this.events.subscribe('event:addValue2',

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

组件1.ts

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

this.events.subscribe('event:addValue2', (data: any) => {
this.valueName = 'VALUE2';
});
在这个组件之外,我从任何页面调用发布方法,比如:

第1.ts页

this.events.publish('event:addValue1');
第2.ts页

this.events.publish('event:addValue2');
这样,我就可以从任何其他页面更改Component1.ts之外的数据(this.valueName),只需发布所需的事件。 我知道这可能听起来不正确,也不是正确的方法,但这是我从任何页面对组件1.ts进行外部更改的唯一方法

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

@ViewChild('component') component: any;
....
this.component.functionAddValue1().
另外,如果我需要计算并调用Component1.ts中的函数,比如说如果我导航到某个路由,我会通过Angular NavigationExtras发送额外的参数。 在此之前,我只是调用events.publish,并且能够动态地对Component1.ts进行更改。

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

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

    publish(param):void {
      this.dataObserved.next(param);
    }
   }
第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

});
}

你想要用ionic还是redux编写代码?我的应用程序是用Ionic4编写的,所以是的。我发现了这一点:我可以使用redux吗?或者如果不能,我如何使用observables实现这一点?我添加了一个答案,我使用它的自制服务以与事件插件相同的方式获得相同的结果。这是否回答了你的问题?如果我想在我的第一页有3个事件呢。第1页也是我需要运行一些代码的地方,因此当我在第2页发布“事件名称”时,我需要知道在第1页要执行哪些操作,因为所有3个事件都在第1页执行不同的操作和代码。您可以为事件类型添加另一个主题行为,并在参数之前在publish methid中传递它,您得到的第一个值将是eventname,当前事件将是datathis.event.currentEvent.subscribe(data=>{this.page1value==='VALUE1';});我在Page1中有3个不同的事件,如下面的一个,根据从Page2发布的事件,我需要发布它,并因此更改我的Page1中的Page1值。例如,其他事件正在将page1value更改为VALUE2和VALUE3。我仍然不确定如何使用您的方法来实现这一点。例如,您有publish(name,param){this.dataObserved.next({name:name,params:param});}当您获得可观察对象时,您将获得值,您将检查data.name==what,然后获取其值。。。我明白这一点,但我仍然不确定它将如何满足我的需求和国家管理。您的示例的工作方式为:。我需要更多,以便能够在一个调用或一个发布方法中更改page1中的变量和函数集。我不需要传递值,然后通过订阅在第2页中获取数据。我需要的是相反的方式,在第2页中使用justpublish,并在其中包含与第1页相关的所有功能集的订阅。
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

});
}