'Form' için bilinen bir özellik olmadığından 'formControl'e bağlanamıyor - Angular2 Material Autocomplete issue


356

Açısal 2 projemde Açısal Malzeme Otomatik Tamamlama bileşenini kullanmaya çalışıyorum . Şablonuma aşağıdakileri ekledim.

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

Benim bileşenim aşağıda.

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

Aşağıdaki hatayı alıyorum. formControlDirektif bulunmuyor gibi görünüyor .

'İnput' öğesinin bilinen bir özelliği olmadığından 'formControl' öğesine bağlanamıyor

Burada sorun nedir?


5
Pengyy cevabı bir yorum: kullanırken formControl, İçe zorunda ReactiveFormsModulesizin için modül değil, rootModule . FormControlÖzellik modüllerinizde kullanmanız durumunda .
Kral John,

Benzer bir durum var ve benim özellik ReactiveFormsModule için ithalat var. Tek fark 'formControl' yerine 'formControlName' bağlamak istiyorum. Mesaj aynı yapıya sahip
Искрен Станиславов

Buradaki cevaplar doğrudur; ancak eğer kimse hala sıkışmışsa (benim gibi) ve hata formcontrol(küçük harfli) değil formControl, webpack html-loader ile şablon çalıştırıyorsanız, bu yardımcı olacaktır: stackoverflow.com/a/40626329/287568
Ben Boyle

Yanıtlar:


761

Kullanırken dizinize formControliçe aktarmanız ReactiveFormsModulegerekir imports.

Misal:

import {FormsModule, ReactiveFormsModule} from '@angular/forms';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    ReactiveFormsModule,
    MaterialModule,
  ],
  ...
})
export class AppModule {}

174
Gerçekten, bu neden material.angular.io/components/autocomplete/overview adresindeki dokümanda bunun için çok fazla zaman harcanmıyor. Açısal olan her yerde büyülü bilinmeyen bağımlılıklar.
Vadorequest

4
@Vadorequest: Bu dokümanlar Materyal içindir. Açtıkları kullandıkları her Açısal özellik için doküman eklemeye başlarlarsa, Açısal dokümanlar ile sonunda senkronizasyondan kaybolacak Materyal dokümanlar arasında çok sayıda yineleme olabilir. Ama bu konuda da başımı kaşıracak kadar zaman harcadım. Her zaman malzeme github repo'suna
Eric Ihli

23
Bu bir mazeret değil IMHO. Belki bir tür ipuçlarına bağlantı veren bir "genel sorun giderme" hakkında bir şeyler yapabilirler. Kütüphaneleri diğer yerel açısal bağımlılıklara bağlıysa, bu bölümleri vurgulamak da onların görevidir. Özellikle bu durumda, çerçevesi "material.angular.io" üzerindedir.
Vadorequest

4
Veya sadece kullandığınız şeye göre bu tür modülleri otomatik olarak çeken standart bir takım. Web paketi için bir iş gibi mi geliyor?
ferr

Otomatik tamamlama belgelerinde Stackblitz'e bakarsanız ReactiveFormsModule kullanma ihtiyacı açıktır. Daha genel olarak, herhangi bir bileşenin Stackblitz demosunda sayfa içi koddan daha fazla ayrıntı olacaktır ...
David Haddad

42

Diğerlerinin söylediği gibi, genellikle .ts örneğini deşifre etmeye çalışmayı unutun.

Bunun yerine, burada daire içine alınmış 'pop-out' simgesine tıkladığınızda tam olarak çalışan bir StackBlitz örneği elde edersiniz .

resim açıklamasını buraya girin

Gerekli modülleri hızlı bir şekilde onaylayabilirsiniz:

resim açıklamasını buraya girin

İle ilgili tüm örnekleri ReactiveFormsModuleyorumlayın ve hatayı alacağınızdan emin olun:

Template parse errors:
Can't bind to 'formControl' since it isn't a known property of 'input'. 

Teşekkürler, beni doğru yöne doğrulttu ve gelecekte nereye bakılacağını biliyor!
m.edmondson


-1

Şablonunuza düzenli bir matInput ekleyerek başlayın. Girdinin değerini izlemek için ReactiveFormsModule'den formControl yönergesini kullandığınızı varsayalım.

Reaktif formlar, değerleri zaman içinde değişen form girdilerini işlemek için modele dayalı bir yaklaşım sağlar. Bu kılavuz, basit bir form denetiminin nasıl oluşturulacağını ve güncelleştirileceğini, bir grupta birden çok denetimin kullanılmasına nasıl devam edileceğini, form değerlerinin nasıl doğrulanacağını ve daha gelişmiş formların nasıl uygulanacağını gösterir.

import { FormsModule, ReactiveFormsModule } from "@angular/forms"; //this to use ngModule

...

imports: [
    BrowserModule,
    AppRoutingModule,
    HttpModule,
    FormsModule,
    RouterModule,
    ReactiveFormsModule,
    BrowserAnimationsModule,
    MaterialModule],
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.