【问题标题】:Cannot use inheritance properly Ionic 2无法正确使用继承 Ionic 2
【发布时间】:2017-08-25 17:16:06
【问题描述】:

我正在开发一个具有不同页面的应用程序,我想为所有页面继承的页面创建一个抽象类。 问题是,如果我用抽象类“扩展”一个类,它可以工作,但是一旦我有两个或更多页面扩展抽象类,它就会给我这个错误:

Cannot read property 'prototype' of undefined

我的 AbstractPage 是这个:

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 上添加了一个 repo: https://github.com/francescobenintende/Tests/tree/master/abstraction

错误: http://imgur.com/a/0PfTe

【问题讨论】:

    标签: angular inheritance typescript ionic2 extends


    【解决方案1】:

    更新:

    你现在不能在 Ionic2 和 Typescript 中使用这种 Page 组件继承。希望你可以使用 Ionic3 和最新的 Typescript 来实现,这将包含在 Ionic3 中。这个问题与 Typescript 和 web pack 有关。

    你可以得到more info here。

    如果您浏览main.js.map 文件,您也可以在这里看到问题。它首先创建一个子类(Page1),然后创建一个基类(AbstractPage)。这就是这个错误的原因。但不幸的是,我们无法更改顺序。

    旧答案:

    您可以尝试在abstract 类上使用public constructor(),如下所示。

     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'});
        }
      }
    }
    

    【讨论】:

    • 我已经在我的应用程序中使用了上述配置,完全没有问题。似乎是不同的问题。删除故障类(子类)的所有代码,只需进行简单的继承和检查。
    • 简单继承是什么意思?
    • 我的意思是删除该类(子类)上的所有代码并检查。像这样。希望你有更多关于这个类的代码。export class Page2 extends AbstractPage{ constructor(public navCtrl: NavController) { super(2, true); } }
    • 我从课堂上删除了所有内容,除了我在最初的问题中发布的内容。
    • 你能创建这个用例的轻量级版本并将其放在 git repo 上吗?那么我们可以玩它不?
    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2023-03-16
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    相关资源
    最近更新 更多