Я работаю с Aurelia и Typcript, и я пытаюсь достичь следующего: иметь базовый класс с именем Parent
, расширить этот класс в классе с именем Child
, а затем ввести экземпляр Child
в другой класс. Вот установка:Aurelia & Bookscript инъекции и наследование
//file1
export class Parent {
constructor() {
debugger;
}
}
//file2
import {Parent} from "file1";
export class Child extends Parent {
constructor() {
super();
debugger;
}
}
//file3
import {inject} from "aurelia-framework";
import {Child} from "file2";
@inject(Child)
export class Home {
private child: Child;
constructor(_child: Child) {
this.child = _child;
debugger;
}
}
Однако, когда я делаю это и экземпляр Home
, я получаю следующее сообщение об ошибке:
Uncaught SyntaxError: Unexpected token <
вместе с ERROR [app-router] Router navigation failed, and no previous location could be restored.
Теперь, после первой ошибки, Uncaught SyntaxError: Unexpected token <
дает мне ссылка на file1.js
на первой строке. (что странно содержит html-код из индекса приложения).
Теперь, если я беру инъекции из file3
и сделать что-то вроде этого:
//@inject(Child)
export class Home {
private child: Child;
constructor() {
this.child = new Child(); //here I don't inject, I just
//instantiate a new object of type Child - still the same error
debugger;
}
}
я получаю точно такую же ошибку, так что это, кажется, не быть связаны инъекции.
Итак, как я могу получить базовый класс с именем Parent
, расширьте этот класс в классе с именем Child
, а затем введите экземпляр Child
в другой класс?
Или что-то в моем подходе, что не так?
Спасибо!
ОБНОВЛЕНИЕ: простой факт наличия вызова для new Child()
бреет все, это не имеет значения, если он вызывается при загрузке страницы, в конструкторе или если он находится в методе на кнопке , При загрузке он ломается.
buttonMethod(){
var x = new Child(); //it breakes the same way
}
Теперь, если я двигаю Child
класс в том же файле, как Home
и file3
выглядит следующим образом:
import {inject} from "aurelia-framework";
import {Parent} from "file1";
export class Home {
child: Child;
constructor() {
this.child = new Child();
debugger;
}
}
export class Child extends Parent {
constructor() {
super();
debugger;
}
}
и я его экземпляр, как это работает. Однако, когда я пытаюсь внедрить его, так:
import {inject} from "aurelia-framework";
import {Parent} from "file1";
@inject(Child)
export class Home {
child: Child;
constructor(_child: Child) {
this.child = _child;
debugger;
}
}
export class Child extends Parent {
constructor() {
super();
debugger;
}
}
я получаю: inner error: Error: key/value cannot be null or undefined. Are you trying to inject/register something that doesn't exist with DI?
В конце концов, я хочу, чтобы иметь их в отдельных файлах, но это начало заставить его работать так :) Благодаря!
Вы пытались установить полный 'абсолютный путь' в' файл1'? Что-то вроде 'absolute/path/to/file1'? –
Также посмотрите на "@autoInject" –