繁体   English   中英

Aurelia:@autoinject不会注入Element

[英]Aurelia: @autoinject does not inject Element

我的自定义属性中有@autoinject()装饰器,我有一些奇怪的bevaviour。

该属性的构造函数如下所示:

constructor(element: Element,translationService: TranslationService, eventAggregator: EventAggregator){
    console.log(element);
    console.log(translationService);
    console.log(eventAggregator);
    ...
}

该类使用@autionject()进行@autionject() ,而正确注入参数translationServiceeventAggregatorelement参数将填充一个绝对不是元素的对象。

元素看起来像这样:

{
    jQuery321051167339178565241 : {events: {…}, handle: ƒ}
    __proto__: Object
}

当我使用@inject(Element, TranslationService, EventAggregator)而不是@autoinject() ,元素被正确注入。

有人猜猜出了什么问题吗?

你得到的是一个jquery包装元素(例如,如果你调用$(el)你得到的),所以TypeScript可能会以某种方式发出错误的类型元数据。

为了能够解决这个问题,您需要包括您的打字稿版本,tsconfig,构建配置和Aurelia版本。

在此期间,当您使用@autoinject()并搜索与您的自定义属性绑定的“design:paramTypes”时,请查看应用程序的发出.js 它应该看起来像这样:

exports.MyCustomAttribute = __decorate([
    aureliaDependencyInjection.autoinject(),
    __metadata("design:paramtypes", [Element])
], exports.MyCustomAttribute);

然后切换到@inject(Element) ,构建并执行相同的操作。 你应该找到这样的东西:

exports.MyCustomAttribute = __decorate([
    aureliaDependencyInjection.inject(Element),
    __metadata("design:paramtypes", [Element])
], exports.MyCustomAttribute);

查看传递给aureliaDependencyInjection.inject(..)Element对象是否与传递给aureliaDependencyInjection.inject(..)Element对象不同__metadata("design:paramtypes", ..)

这应该有助于排除TypeScript是否确实发出错误的元数据,或者是否有其他错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM