17

我已从 Ionic 4 升级到 Ionic 5,现在出现以下错误:

src/app/app.component.ts(4,10) 中的错误:错误 TS2305:模块 '"/node_modules/@ionic/angular/ionic-angular"' 没有导出的成员 'Events'。

以下导入行导致问题:

import { Events, Platform } from '@ionic/angular';

如何从@ionic/angularIonic 5 中的错误中修复成员事件?

4

2 回答 2

34

Eventsfrom @ionic/angularpackage 从 Ionic 5 中删除。您可以在此处查看 Ionic5 中的重大更改。

正如在重大更改中提到的那样,您应该使用Observables.

例如,您可以创建以下服务:

import {Injectable} from '@angular/core';
import {Subject} from 'rxjs';

@Injectable({
    providedIn: 'root'
})
export class GlobalFooService {

    private fooSubject = new Subject<any>();

    publishSomeData(data: any) {
        this.fooSubject.next(data);
    }

    getObservable(): Subject<any> {
        return this.fooSubject;
    }
}

现在,您可以订阅任何组件,例如app.component.ts

@Component({
    selector: 'app-root',
    templateUrl: 'app.component.html',
    styleUrls: ['app.component.scss']
})
export class AppComponent {

    constructor(private globalFooService: GlobalFooService) {
        this.initializeApp();
    }

    initializeApp() {
        // other code

        this.globalFooService.getObservable().subscribe((data) => {
            console.log('Data received', data);
        });
    }
}

现在,您只需要从其他一些组件发出事件:

@Component({
    selector: 'app-home',
    templateUrl: 'home.page.html',
    styleUrls: ['home.page.scss']
})
export class HomePage {

    constructor(private globalFooService: GlobalFooService) {
    }

    onSomeButtonClick() {
        this.globalFooService.publishSomeData({
            foo: 'bar'
        });
    }
}

这是一个非常简单的解决方案/示例或替代方案,Events但您可以进一步调整代码以使其成为带有主题的命名空间事件。

我已经为此写了一篇博客,它可以为您提供一个功能齐全的解决方案,这样您就可以通过非常少的代码更改来升级您的应用程序。

https://medium.com/wizpanda/dealing-with-break-change-in-ionic-5-db3ba711dfcd

于 2020-02-16T08:56:13.447 回答
1

事件已被删除。您可以使用 observables 和主题行为将自己的服务作为事件作为您自己的服务,以便您可以发布到 ovserable 并订阅以获取值。

于 2020-02-14T16:15:05.157 回答