Не может правильно использовать наследование ионный 2


Я работаю над приложением с разными страницами,и я хотел бы иметь абстрактный класс для страницы, от которой все страницы наследуются. Проблема в том, что если я "расширяю" один класс с абстрактным, он работает, но как только я расширяю абстрактный класс на две или более страниц, он дает мне эту ошибку:

Cannot read property 'prototype' of undefined

Моя абстрактная страница такова:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Contact } from '../contact/contact';
import { Page1 } from '../page1/page1';
import { Page2 } from '../page2/page2';
import { Page3 } from '../page3/page3';
import { Page4 } from '../page4/page4';
import { Page5 } from '../page5/page5';
import { Page6 } from '../page6/page6';
import { Page7 } from '../page7/page7';
import { Page8 } from '../page8/page8';
import { Page9 } from '../page9/page9';
import { Page10 } from '../page10/page10';
import { Page11 } from '../page11/page11';
import { Page12 } from '../page12/page12';
import { Page13 } from '../page13/page13';
import { Page14 } from '../page14/page14';
import { Page15 } from '../page15/page15';
import { Page16 } from '../page16/page16';

export abstract class AbstractPage {
  static pages = [Page1, Page2, Page3, Page4, Page5, Page6, Page7, Page8, Page9, Page10, Page11, Page12, Page13, Page14, Page15, Page16];
  pageNumber: number;
  hasSharableContent: boolean;
  public navCtrl: NavController;

  constructor( page_number: number, has_sharable_content: boolean) {
    this.pageNumber = page_number;
    this.hasSharableContent = has_sharable_content;
  }

  changePage(direction: number) {
    if (direction==1){
      console.log(direction,this.pageNumber);
      this.navCtrl.setRoot(AbstractPage.pages[this.pageNumber], {}, {animate: true, direction: 'forward'});
    }
    else if(direction == 2){
      this.navCtrl.push(Contact);
    }
    else{
      this.navCtrl.setRoot(AbstractPage.pages[this.pageNumber-1], {}, {animate: true, direction: 'back'});
    }
  }
}

Моя страница 1:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import {AbstractPage } from '../abstract-page/abstract-page';

@Component({
  selector: 'page1',
  templateUrl: 'page1.html'
})

export class Page1 extends AbstractPage{
  constructor(public navCtrl: NavController) {
    super(1, false);
  }
}

Моя Страница 2:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { AbstractPage } from '../abstract-page/abstract-page';

@Component({
  selector: 'page2',
  templateUrl: 'page2.html'
})


export class Page2 extends AbstractPage{
  constructor(public navCtrl: NavController) {
    super(2, true);
  }
}

Я добавил РЕПО на GitHub, если кто-то хочет попробовать решить проблему : https://github.com/francescobenintende/Tests/tree/master/abstraction

Ошибка : http://imgur.com/a/0PfTe

1 3

1 ответ:

Обновление:

Теперь вы не можете использовать этот вид наследования компонентов страницы с Ionic2 и Typescript.Надеюсь, что вы можете сделать это с Ionic3 и последним шрифтом, который будет включен в Ionic3.Эта проблема связана с Typescript и web pack.

Вы можете получить Более подробная информация здесь.

Вы тоже можете увидеть проблему здесь, если исследуете main.js.map file.It сначала создается подкласс (Page1), а затем базовый класс (AbstractPage).Вот в чем причина этого ошибка.Но, к сожалению, мы не можем изменить порядок.

Старый Ответ:

Вы можете попробовать с public constructor() в классе abstract, как показано ниже.

 export abstract class AbstractPage {


  constructor(public page_number: number,public has_sharable_content: boolean) {

    }

  changePage(direction: number) {
    if (direction==1){
      console.log(direction,this.page_number);
      this.navCtrl.setRoot(AbstractPage.pages[this.page_number], {}, {animate: true, direction: 'forward'});
    }
    else if(direction == 2){
      this.navCtrl.push(Contact);
    }
    else{
      this.navCtrl.setRoot(AbstractPage.pages[this.page_number-1], {}, {animate: true, direction: 'back'});
    }
  }
}