Aurelia ve Typescript ile çalışıyorum ve şu şeyi elde etmeye çalışıyorum: Parent
adında bir temel sınıf var, bu sınıfı Child
adlı bir sınıfta genişlet ve sonra Child
örneğini enjekte et başka bir sınıf. İşte tuzak: Bunu ve Home
örneğini zaman, AncakAurelia & Typescript enjeksiyonu ve kalıtım
//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;
}
}
, aşağıdaki hatayı alıyorum:
Uncaught SyntaxError: Unexpected token <
boyunca Şimdi ERROR [app-router] Router navigation failed, and no previous location could be restored.
, ilk hata ile, Uncaught SyntaxError: Unexpected token <
verir İlk satırda file1.js
referansı. (garip bir şekilde uygulama dizininden html kodunu içerir). Ben file3
dışına enjeksiyonu almak ve böyle bir şey yaparsanız
Şimdi:
//@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;
}
}
o enjeksiyon ilgili olarak görünmüyor yüzden, tam olarak aynı hatayı alıyorum.
Peki, Parent
adında bir temel sınıfıma sahip olabilirim, bu sınıfı Child
adlı bir sınıfta genişletebilir ve sonra başka bir sınıfta Child
örneğini enjekte edebilir?
Ya da benim yaklaşımımda doğru olmayan bir şey var mı?
Teşekkürler!
GÜNCELLEŞTIRME: new Child()
numaralı çağrıya sahip olmanızın basit bir gerçeği, herşeyi bozar, sayfanın yüklenmesinde, yapıcısında çağrılırsa veya bir düğmedeki bir yöntemde olursa önemli değildir . Yükleme sırasında kırılır.
buttonMethod(){
var x = new Child(); //it breakes the same way
}
Şimdi Home
aynı dosyada Child
sınıf taşırsanız ve file3
şuna benzer:
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;
}
}
ve bunun işe yaradığını bunu böyle örneğini. Ancak, ben çalıştığınızda bu yüzden, bunu enjekte etmek: Sonunda
inner error: Error: key/value cannot be null or undefined. Are you trying to inject/register something that doesn't exist with DI?
ben ayrı dosyalarda onları olsun istiyorum, ama bir başlangıç o kadar işe yapıyor :) :
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;
}
}
alıyorum Teşekkürler!
Tüm 'mutlak yolu' dosya1'e ayarlamayı denediniz mi? Mutlak/yol/to/dosya1 gibi bir şey? –
Ayrıca, "@otokuInject" e bakınız. –