bugfix> javascript > 投稿

@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 件
  • 取得しているのは、jqueryラップされた要素です(例: $(el) を呼び出した場合に取得するもの )、TypeScriptが何らかの形で間違ったタイプメタデータを出力している可能性があります。

    これを修正するには、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が実際に間違ったメタデータを送信しているかどうか、または他の何かが間違っているかどうかを除外するのに役立ちます。

あなたの答え