我的自定义属性中有@autoinject()
装饰器,我有一些奇怪的bevaviour。
属性的构造函数如下所示:
constructor(element: Element,translationService: TranslationService, eventAggregator: EventAggregator){
console.log(element);
console.log(translationService);
console.log(eventAggregator);
...
}
该类使用@autionject()
修饰,而参数translationService
和eventAggregator
正确注入,element
参数填充了一个绝对不是元素的对象。
元素如下所示:
{
jQuery321051167339178565241 : {events: {…}, handle: ƒ}
__proto__: Object
}
当我使用@inject(Element, TranslationService, EventAggregator)
代替@autoinject()
时,元素会正确注入。
有人猜测出了什么问题吗?
答案 0 :(得分:1)
你得到的是一个jquery包装元素(例如,如果你调用$(el)
会得到什么),所以TypeScript可能会以某种方式发出错误的类型元数据。
为了能够解决这个问题,您需要包含打字稿版本,tsconfig,构建配置和Aurelia版本。
与此同时,当您使用.js
并搜索" design:paramTypes"时,请查看应用中发出的@autoinject()
。这与您的自定义属性绑定。看起来应该是这样的:
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);
查看传递给Element
的{{1}}对象是否与传递给aureliaDependencyInjection.inject(..)
这应该有助于排除TypeScript是否确实发出了错误的元数据,或者是否有其他错误。