2017-07-19 16 views
1

私はまったく新しい角度ですし、角度ガイドからbasic structural directiveを注入しようとしています。角4のディレクティブエラー:ディレクティブのすべてのパラメータを解決できません

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> 
... 
私は私の TradeModuleでそれを注入しようとしている

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; 
    } 
    } 
} 

:ここに私のディレクティブです

エラーが表示されます。

Uncaught Error: Can't resolve all parameters for DropdownDirective: ([object Object], [object Object], ?).

Webstormも私の@Directiveデコレータの基礎となると、次のことを言うている:

それはまた私の pcDropdown入力が未使用であることを言う

Angular: Can't resolve all parameters for DropdownDirective in /home/commercialsuicide/Desktop/my-app/src/client/app/dropdown.directive/dropdown.directive.ts: ([object Object], [object Object], ?)

enter image description here

enter image description here

こと、言う必要があります私はすでにthis answeremitDecoratorMetadataが既にtrueに設定されていることを見た。

私のスペルが間違っているか、自分のコードに何かを含めるのを忘れたことを指摘してください。

感謝

答えて

2

private itemsは、型パラメータが欠落しています。 Angularは、すべてのパラメータをプロバイダに解決できない場合、コンポーネントインスタンスを作成できません。
プロバイダへの解決は、パラメータタイプと@Inject(...)注釈でのみ機能します。

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

+0

Hmの場合、溶液は非常に塩基性である。あなたの助けをありがとう! –

+1

ヒント:エラーメッセージは、 '?'どのパラメータがエラー 'DropdownDirective:([オブジェクトオブジェクト]、[オブジェクトオブジェクト]、?)を発生させます。これはあなたのためにそれをすでに解決して嬉しい:) –

0

私の訴えによってこの質問だけが見つかりましたので、ここに私のケースを残しました。

アノテーション@HostListenerとonResizeメソッドがありました。 @HostListenerは、関連するメソッドの前後にある必要があります。別のメソッドを呼び出す前に、注釈を移動したとき

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

と同じように私はこのエラーを得ました。 Like

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

onResize(event) { 
    // some code 
} 

希望は、これは誰かに役立つでしょう!

関連する問題