Аурелия: @autoinject не вводит элемент - PullRequest
0 голосов
/ 25 мая 2018

У меня есть странное поведение с декоратором @autoinject() в моем настраиваемом атрибуте.

Конструктор атрибута выглядит следующим образом:

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(), элемент вводится правильно.

Кто-нибудь догадывается, что происходит?

1 Ответ

0 голосов
/ 26 мая 2018

То, что вы получаете, - это завернутый в jquery элемент (например, то, что вы получаете, если вы вызываете $(el)), поэтому, возможно, TypeScript каким-то образом выдает метаданные неправильного типа.

Чтобы исправить это,вам нужно будет указать свою версию машинописного текста, tsconfig, конфигурацию сборки и версию Aurelia.

А пока посмотрите на испускаемое .js вашего приложения при использовании @autoinject() и выполните поиск по запросу: design:paramTypes ", который привязан к вашему пользовательскому атрибуту.Это должно выглядеть примерно так:

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, переданный aureliaDependencyInjection.inject(..), от объекта, переданного __metadata("design:paramtypes", ..)

Это должно помочь исключитьTypeScript действительно испускает неправильные метаданные или, если что-то идет не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...