[英]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()
,而正确注入参数translationService
和eventAggregator
, element
参数将填充一个绝对不是元素的对象。
元素看起来像这样:
{
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.