components
とapp
の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がこれを認識できない理由は何ですか?
実際には@ angular/commonと同様にインポートされていますが、例を短くするためにスキップしました。(ReactiveFormsModuleもインポートしています) –
それでは、関連するコンポーネントセクションを完全に表示できますか?実際にトラブルシューティングに役立ちます。または、プランナーがすばらしいでしょう! – amal