Aurelia:@autoinject不会注入Element

时间:2018-05-25 09:08:23

标签: javascript html typescript aurelia

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

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

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

该类使用@autionject()修饰,而参数translationServiceeventAggregator正确注入,element参数填充了一个绝对不是元素的对象。

元素如下所示:

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

当我使用@inject(Element, TranslationService, EventAggregator)代替@autoinject()时,元素会正确注入。

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

1 个答案:

答案 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是否确实发出了错误的元数据,或者是否有其他错误。