无法绑定到'ngValue',因为它不是'option'的已知属性。

25

我正在尝试在Angular 5中实现select,但我一直得到这个错误:

输入图像描述

我已经尝试了许多StackOverflow的问题,唯一的区别是——我的组件位于应用程序中的另一个模块内,最终被注入到主模块中。我还尝试将FormsModule注入到内部模块中。我尝试导入ReactiveFormsModule,但没有成功。

我已像这样将FormsModule添加到imports中:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { AppRoutingModule } from './app-routing.module';

@NgModule({
  declarations: [
    ...CombineComponents
  ],
  imports: [
    BrowserModule,
    FormsModule,
    AppRoutingModule,
    HttpClientModule
  ]
});

这是我的组件标记

<label for="ctn" class="d-inline-block pl-1 semi-bold">Current active number</label>
  <select
    #selectElem
    class="custom-select"
    id="ctn"
    (change)="onCTNChange(selectElem.value)"
    formControlName="state"
  >
    <option value="" disabled>Choose a state</option>
    <option *ngFor="let ctn of availableCTN" [ngValue]="ctn.value">
      {{ctn.text}}
    </option>
  </select>
3个回答

41

使用value属性:

[value]="ctn.value"

它能够工作,但我仍然无法绑定值。它没有将其设置为默认值。 - Usman Tahir
因为添加[ngModel]也会抛出类似的错误。 - Usman Tahir
ngModel会抛出什么错误?您是否导入了FormsModule?...import { FormsModule } from '@angular/forms'; - Lucas
是的,我正在导入它。"无法绑定到 'ngModel',因为它不是 'select' 的已知属性"。 - Usman Tahir
4
好的,它起作用了。我正在使用CommonsModule,我还必须在子模块中导入FormsModule。 - Usman Tahir

2
我犯了一个非常愚蠢的错误,导致出现了这个问题。
  1. 我应该使用[value]而不是[ngValue]="ctn.value"
  2. 我应该在子模块中导入formsModule,而不是在父模块中导入,以使[(ngModel)]正常工作。
  3. [value]应该改为[(value)],如果我们希望默认选择显示出来。
所以我的最终组件代码是。
<label for="ctn" class="d-inline-block pl-1 semi-bold">Current active number</label>
  <select
    #selectCTN
    class="custom-select"
    id="ctn"
    [(ngModel)]="selectedCTN"
    (change)="onCTNChange(selectCTN.value)"
  >
    <option value="" disabled>Choose a state</option>
    <option *ngFor="let ctn of availableCTN" [(value)]="ctn.value">
      {{ctn.text}}
    </option>
  </select>

0
[value] 在这种情况下可以使用。就我而言,我也没有使用formmodule,只是在< tag >标签中使用它,运行良好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,