我尝试在我的Angular 2项目中使用Angular Material Autocomplete组件。我在我的模板中添加了以下内容。
<md-input-container>
<input mdInput placeholder="Category" [mdAutocomplete]="auto" [formControl]="stateCtrl">
</md-input-container>
<md-autocomplete #auto="mdAutocomplete">
<md-option *ngFor="let state of filteredStates | async" [value]="state">
{{ state }}
</md-option>
</md-autocomplete>
以下是我的组件。
import {Component, OnInit} from "@angular/core";
import {ActivatedRoute, Router} from "@angular/router";
import {FormControl} from "@angular/forms";
@Component({
templateUrl: './edit_item.component.html',
styleUrls: ['./edit_item.component.scss']
})
export class EditItemComponent implements OnInit {
stateCtrl: FormControl;
states = [....some data....];
constructor(private route: ActivatedRoute, private router: Router) {
this.stateCtrl = new FormControl();
this.filteredStates = this.stateCtrl.valueChanges.startWith(null).map(name => this.filterStates(name));
}
ngOnInit(): void {
}
filterStates(val: string) {
return val ? this.states.filter((s) => new RegExp(val, 'gi').test(s)) : this.states;
}
}
我得到以下错误。似乎找不到formControl
指令。
无法绑定到“formControl”,因为它不是“input”的已知属性
这里的问题是什么?
9条答案
按热度按时间f1tvaqid1#
在使用
formControl
时,您必须将ReactiveFormsModule
导入到imports
阵列。示例:
h79rfbju2#
忘记试图破译的例子。ts -正如其他人所说,它往往是不完整的。
相反,只需单击此处圈出的“弹出”图标,您将获得fully working StackBlitz example。
您可以快速确认所需的模块:
注解掉
ReactiveFormsModule
的任何示例,你肯定会得到错误:v1l68za43#
另一个可能发生这种情况的原因是:
在中使用
formControl
的组件未在导入ReactiveFormsModule
的模块中声明。因此,请检查声明抛出此错误的组件的模块。
xlpyo6sf4#
从9.1.4版开始,您只需导入
ReactiveFormsModule
https://angular.io/guide/reactive-forms
pod7payv5#
在angular 12中,matautocompleteModule的导入路径被更改,它解决了我的问题...现在它看起来像这个
fhg3lkii6#
首先向模板中添加一个常规的matInput。假设您使用ReactiveFormsModule中的formControl指令来跟踪输入的值。
React式表单提供了一种模型驱动的方法来处理值随时间变化的表单输入。本指南向您展示如何创建和更新简单的表单控件,如何在一个组中使用多个控件,如何验证表单值,以及如何实现更高级的表单。
...
8iwquhpp7#
对我来说,最有效的方法是在@component({})中的模板``中构建表单,例如--
这停止显示错误。如果错误仍然存在,那么这可以为您解决
0s7z1bwu8#
对我有效的是将我的进口转移到我的申报和出口之前,不知道为什么这有效,但它确实有效。
2eafrhcq9#
如果你使用的是独立组件,ReactiveFormsModule的导入必须在自己的组件中,而不是app.module.ts。