私は最後のAngular Connect https://youtu.be/CD_t3m2WMM8?t=20m22sでKara Ericksonが推奨するカスタムControlValueAccessorを実装しようとしています。有効な状態を親コンポーネントから子コンポーネントに渡すこと。エラー:NgControl Angular AOTのプロバイダがありません
app.component.html:
<app-country-select ngModel="model" name="country-select"></app-country-select>
国-select.component.html:
<select [formControl]="controlDir.control" #select placeholder="Country" i18n-placeholder (click)="onTouched()"
(change)="onChange($event.value)" [required]="required">
<option value="at">Austria</option>
<option value="au">Australia</option>
</select>
国-select.component.ts:
@Component({
selector: 'app-country-select',
templateUrl: './country-select.component.html',
styleUrls: ['./country-select.component.scss'],
})
export class CountrySelectComponent implements ControlValueAccessor {
@Input() required = false;
@ViewChild('select') select: HTMLSelectElement;
onChange: (value: any) => void;
onTouched:() => void;
constructor(@Self() public controlDir: NgControl) {
controlDir.valueAccessor = this;
}
...
}
完全なコードここに住んでいる:https://github.com/maksymzav/ngcontrol。
JITモードで実行すると、コードは完全に機能します。 NgModel、FormControlName、またはFormControlDirectiveは、実行時にどのコントロールが使用されているかを知っているからだと思います。 しかし、私はAOTはng build --prod
でビルドを実行するときには、メッセージ
のエラーで失敗します。NgControlなしプロバイダ( "[ERROR - >] <アプリ - 国を選択> < /アプリ-国を選択>" )
誰でもこのビルドを成功させる方法を知っていますか?ありがとうございました。
おそらく、formタグで生成されたHTMLを包むのを忘れていました。 – Igor
この投稿を参照してください:https://stackoverflow.com/questions/37284763/using-ngcontrol-caused-error-no-provider-for-controlcontainer – lemmingworks
@Igor、あなたはapp.componentでコードをラップすることを意味しますか?フォームタグにhtml?残念ながら助けにならないでしょう。 –