4

我目前正在尝试将旧的 Ionic 应用程序迁移到 Ionic 4。

在迁移之前它们根本不是问题

我正在处理提供程序文件helper.ts,但遇到了迁移问题。

这是离子信息输出


Ionic:

   ionic (Ionic CLI)             : 4.12.0 (/usr/lib/node_modules/ionic)
   Ionic Framework               : @ionic/angular 4.3.1
   @angular-devkit/build-angular : 0.13.8
   @angular-devkit/schematics    : 7.3.8
   @angular/cli                  : 7.3.8
   @ionic/angular-toolkit        : 1.5.1

System:

   NodeJS : v10.12.0 (/usr/bin/node)
   npm    : 6.9.0
   OS     : Linux 4.13

在旧应用程序中,我必须导入

import { App, MenuController } from 'ionic-angular';

在 ionic 4 ionic-angular被替换为@ionic/angular,但应用程序不再存在。

import { App, MenuController } from '@ionic/angular';

将导致错误:

ERROR in src/services/helper.ts(2,10): error TS2305: Module 'URLmodule' has no exported member 'App'.

所以我尝试导入另一个类,IonApp,但是这个类似乎没有相同的功能

import { IonApp, MenuController } from '@ionic/angular';

将导致错误:

ERROR in src/services/helper.ts(18,18): error TS2339: Property 'getRootNav' does not exist on type 'IonApp'.

我想知道IonApp是否是正确的成员,我必须覆盖它,或者App成员是否在 Ionic 4 中消失了?

这是新的helper.ts

import { Injectable } from '@angular/core';
import { IonApp, MenuController } from '@ionic/angular';
import { Storage } from '@ionic/storage';

import { HomePage } from '../app/home/home.page';

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

  constructor(private app: IonApp, private menuCtrl: MenuController, private storage: Storage) { }

    /**
     * go to HomePage, no matter where u are
    */
    previousPage() {
        this.app.getRootNav().setRoot(HomePage, {}, {animate: true, direction: 'forward'});
    }

    // menu handler, because we have two
    openMenu(menu) {
        this.menuCtrl.enable(true, 'menu-map');
        this.menuCtrl.open('menu-map');
    }

    closeMenu(menu) {
        this.menuCtrl.close('menu-map');
        this.menuCtrl.enable(false, 'menu-map');
    }

    storeStats(article) {
       this.storage.get('processStats').then((val) => {
            let find = false;
            for(let i=0; i < val.length; i++) {
                if(article.code === val[i].code) {
                    let array = val;
                    array[i].view = val[i].view + 1;
                    this.storage.set('processStats', array);
                    find = true;
                    break;
                }
            }
            if(find === false) {
                let array = val;
                array.push({code: article.code, title: article.title, view: 1, notFound: 0})
                this.storage.set('processStats', array)
            }
       })
    }

    notFoundStats(article) {
        this.storage.get('processStats').then((val) => {
            for(let i=0; i < val.length; i++) {
                if(article.code === val[i].code) {
                    let array = val;
                    array[i].notFound = val[i].notFound + 1;
                    this.storage.set('processStats', array);
                    break;
                }
            }
        });
    }

    initialiseStats() {
         this.storage.set('processStats', [{code: "", title: "", view: 0, notFound: 0}])
    }
}
4

1 回答 1

0

嗨 ionic 4,您需要使用 this.appCtrl.getActiveNav 到 this.appCtrl.navigateRoot 并从“ionic-angular”导入 { App,};从 '@ionic/angular' 导入 { NavController };

于 2020-06-12T14:45:39.903 回答