2017-09-12 4 views
0

componentsappの2つのnpmパッケージがあります。 components複数のアプリで使用する再利用可能なコンポーネントが含まれているはずです。私はいくつかのコンポーネントをNgModuleでうまく使いたいと思っています。コンポーネントが外部モジュールからのものである場合、角4は値アクセサを見ることができません

私はそのように定義されたテスト制御を持っている:

/// COMPONENTS PACKAGE

export const VALUE_ACCESSOR: any = { 
    provide: NG_VALUE_ACCESSOR, 
    useExisting: forwardRef(() => TestControlComponent), 
    multi: true 
}; 

@Component({ 
    selector: 'test-control', 
    templateUrl: './test-control.component.html', 
    styleUrls: ['./test-control.component.scss'], 
    providers: [ VALUE_ACCESSOR ] 
}) 
export class TestControlComponent implements OnInit, ControlValueAccessor { ... } 

TestControlComponentは(私は簡潔にするためにそれらをスキップする)すべてのインターフェイス要素が、無操作を持っています。

そしてモジュールではそのようにエクスポートされます。

@NgModule({ 
    imports: [ 
    ], 
    declarations: [ 
    TestControlComponent 
    ], 
    exports: [ 
    TestControlComponent 
    ] 
}) 
export class ComponentModule {} 

そしてそれはそうのように消費されています

// APP PACKAGE

app.module.ts:

import { ComponentModule } from '@company/components'; 
import { FormsModule } form '@angular/forms' 

@NgModule({ 
    imports: [ FormsModule, ComponentModule ], 
    ... 
}) 

そして、app.module.tsで宣言されているコンポーネントの使用状況:

<form #testForm="ngForm"> 
    <test-control name="name" [(ngModel)]=""></test-control> 
</form> 

これは、アプリのコンパイルになりますが、実行時にそれがcore.es5.js:1020 ERROR Error: Uncaught (in promise): Error: No value accessor for form control with name: 'test' Error: No value accessor for form control with name: 'test'をスローし、インポートした制御が働いて停止します。 コントロールをアプリケーションパッケージにコピーし、app.module.tsに宣言するとすべてが機能します。

アクセサーの価値はありますが、Angularがこれを認識できない理由は何ですか?

答えて

0

FormsModuleimports: []の配列ComponentModule宣言にインポートできますか? ComponentModuleの一部である<test-control></test-control>タグで使用されているngModel属性に、必要なモジュールがインポートされていないようです。 (実際にコメントとして追加することを意図していたが、SOはまだ私を許可しなかった)。

+0

実際には@ angular/commonと同様にインポートされていますが、例を短くするためにスキップしました。(ReactiveFormsModuleもインポートしています) –

+0

それでは、関連するコンポーネントセクションを完全に表示できますか?実際にトラブルシューティングに役立ちます。または、プランナーがすばらしいでしょう! – amal

関連する問題