Inheritance 验证和继承

Inheritance 验证和继承,inheritance,aurelia,Inheritance,Aurelia,我创建了以下名为baseModel.js的基类 import { Validation } from 'aurelia-validation'; let id; let version; let validation; @inject(Validation) export class BaseModel { constructor(validation) { this.validation = validation; } } 我正在supplierModel.js中

我创建了以下名为baseModel.js的基类

import { Validation } from 'aurelia-validation';

let id;
let version;
let validation;

@inject(Validation)

export class BaseModel {

constructor(validation) {

    this.validation = validation;

    }
}
我正在supplierModel.js中扩展它

import { BaseModel } from "./baseModel";

let apSupplierCode;
let discountRate;

export class Supplier extends BaseModel {

constructor() {
    super();

    super.validation = validation.on(this)
        .ensure('apSupplierCode')
            .isNotEmpty()
            .hasLengthBetween(3, 6)
        .ensure('discountRate')
            .isNotEmpty()
            .containsOnlyDigits()
            .isBetween(10, 45.99);
    }
}
我在控制台中遇到以下错误

inner error: ReferenceError: validation is not defined
    at new Supplier  http://localhost:9000/dist/models/supplierModel.js:63:55)
我尝试过使用get/set访问器、super.validation和just-validation,但没有任何区别


为什么供应商在其父(BaseModel)类中看不到变量

我不认为依赖项注入是这样工作的,它只会注入您正在创建的当前对象。这可能会破坏目标,但您需要做的是:

import { Validation } from 'aurelia-validation';
export class Supplier extends BaseModel {

@inject(Validation)
constructor(validation) {
    super(validation);
    // Do stuff
    }
}
另一种选择是从基类中的容器显式加载依赖项

import {Container} from 'aurelia-dependency-injection';
import {Validation} from 'aurelia-validation';

export class BaseModel {   
constructor() {        
    this.validation = Container.instance.get(Validation);    
    }
}