web-dev-qa-db-ja.com

Angular 4ディレクティブエラー:ディレクティブのすべてのパラメーターを解決できません

私はAngularにまったく新しく、注入しようとしています 基本的な構造ディレクティブ from Angularガイド。ここに私のディレクティブがあります:

import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';

@Directive({
  selector: '[pcDropdown]'
})
export class DropdownDirective {
  private hasView = false;

  constructor(
    private templateRef: TemplateRef<any>,
    private viewContainer: ViewContainerRef,
    private items
  ) { }

  @Input() set pcDropdown(condition: boolean) {
    if (!condition && !this.hasView) {
      this.viewContainer.createEmbeddedView(this.templateRef);
      this.hasView = true;
    } else if (condition && this.hasView) {
      this.viewContainer.clear();
      this.hasView = false;
    }
  }
}

TradeModuleに挿入しようとしています:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { SharedModule } from '../shared/shared.module';
import { TradeComponent } from './trade.component';
import { DropdownDirective } from '../dropdown.directive/dropdown.directive';

@NgModule({
  imports: [
    CommonModule,
    SharedModule
  ],
  declarations: [TradeComponent, DropdownDirective],
  exports: [DropdownDirective]
})
export class TradeModule { }

また、TradeComponentのテンプレートでHTMLの次の部分を使用します。

...
<p *pcDropdown="true">
  TEST
</p>
...

しかし、私はエラーを得ています:

キャッチされないエラー:DropdownDirectiveのすべてのパラメーターを解決できません:([object Object]、[object Object]、?)。

Webstormも私の@Directiveデコレータの基礎になっており、次のように言っています。

Angular:/home/commercialsuicide/Desktop/my-app/src/client/app/dropdown.directive/dropdown.directive.ts:([object Object]、[object Object]、? )

enter image description here

また、私のpcDropdown入力は使用されていません。

enter image description here

言う必要がある、私はすでに この答え を見たし、emitDecoratorMetadatatsconfig.jsontrueにすでに設定されている。

スペルを間違えたか、コードに何かを含めるのを忘れた場所を指摘してください。

どうもありがとう

7

_private items_に型パラメーターがありません。 Angularすべてのパラメーターをプロバイダーに解決できない場合、コンポーネントインスタンスを作成できません。
プロバイダーへの解決は、パラメーター型と@Inject(...)アノテーションでのみ機能します。

itemsを注入したくない場合は、パラメーターを削除します。パラメータを明示的に渡すためにコンポーネントインスタンスを自分で作成する必要がある状況はありません。

6

私のリクエストによってこの質問だけが見つかったので、私はここに私のケースを残しました。

アノテーション@HostListenerとonResizeメソッドがありました。 @HostListenerは、関連するメソッドの前および近くにある必要があります。お気に入り

@HostListener("window:resize", ["$event"])
onResize(event) {
    // some code
}

別のメソッドを呼び出す前に注釈を移動したときにこのエラーが発生しました。お気に入り

@HostListener("window:resize", ["$event"])
getSomeObjects (args:any = {}) {
    // some code
}

onResize(event) {
    // some code
}

これが誰かに役立つことを願っています!

0
dragomirik

私の場合、Storageという名前のサービスがあるためにこのエラーが発生しましたが、javascriptには同じ名前のグローバル変数があるため、コンパイラーはそれをエラーとしてマークしません。だから私は追加しました:

import { Storage } from '@core/auth/token-storage.service';
0
veloz21