【问题标题】:Angular 2 Select Menu ValueAngular 2 选择菜单值
【发布时间】:2017-01-27 00:55:07
【问题描述】:

我正在尝试获取此下拉列表的值,但我得到的是一个空字符串。

    <form novalidate [formGroup]="myForm" (ngSubmit)="test()" autocomplete="off">
<divformGroupName="SignUpForm">
    <div class="row">
        <div>
         <select formControlName="helloworld" title="University">
           <option *ngFor="let firstname of names">{{firstname}}</option>
         </select>
        </div>
    </div>
</div>
  <div>
<button type="submit" name="action">Sign Up</button>
</div>
</form>

这是打字稿文件

 myForm: FormGroup;

  constructor(private _fb: FormBuilder) { }

  list = [
    {"name": "A"},
    {"name": "B"},
    {"name": "C"},
  ];
  names: Array<string> = this.list.map(id => id.name);

  test(){
    console.log(this.myForm.controls['SignUpForm'].value['helloworld']);
  }

  ngOnInit() {
    this.myForm = this._fb.group({
      SignUpForm: this._fb.group({
        helloworld: ['', Validators.compose([
          Validators.required,
        ])]
    }),
    });

我无法获得选择菜单的值。当我执行 console.log 时,我得到一个空字符串。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 变量名的定义在哪里?
  • @VolodymyrBilyachat 我更新了我的问题。谢谢你:)

标签: javascript angular


【解决方案1】:

根据此处的文档:

https://angular.io/docs/ts/latest/api/forms/index/SelectControlValueAccessor-directive.html

您需要在选项标签上绑定 [ngValue] 以使支持模型跟随您的视图。

然后看起来像这样:

<form novalidate [formGroup]="myForm" (ngSubmit)="test()" autocomplete="off">
<divformGroupName="SignUpForm">
    <div class="row">
        <div>
         <select formControlName="helloworld" title="University">
           <option *ngFor="let firstname of names" [ngValue]="firstname">{{firstname}}</option>
         </select>
        </div>
    </div>
</div>
  <div>
<button type="submit" name="action">Sign Up</button>
</div>
</form>

【讨论】:

  • 对于任何旁观者:这很好,就像以前我不得不手动捕获更改事件并更新我的表单一样,因为钩子在响应式表单中无法正常工作——但这​​又回到了 beta 版本.很高兴看到它现在应该可以工作了。
  • 是的,你是正确的选择你需要设置 ngValue
  • 它仍然无法正常工作。我在控制台中得到空字符串。
  • 你是否也改变了@VolodymyrBilyachat?我认为你的&lt;divformGroupName="SignUpForm"&gt; 需要是&lt;div [formGroupName]="SignUpForm"&gt;
  • @chrispy 是的,我做到了
【解决方案2】:

如前所述,像这样使用ngValue

<option *ngFor="let firstname of names" [ngValue]="firstname">

否则对我来说唯一的问题似乎是这一行缺少空格:

<divformGroupName="SignUpForm">

应该是

<div formGroupName="SignUpForm">

我对您的确切代码做了一个 plunker,它似乎与上述调整工作正常。只是如果你想仔细检查工作代码,这里是

Plunker

【讨论】:

  • @SoftwareNinja,这个答案对你有帮助吗? :)
  • 不,仍然不适合我。除“选择”菜单外,所有其他输入字段均正常工作。它只是空白,不会改变{ "SignUpForm": { "firstName": "asdf", "lastName": "asdf", "email": "asdf", "password": ".kl", "confirmPassword": "asdf", "helloworld": "" } }
  • 我将我的代码复制到 plunker,它在那里工作。它只是在我的本地机器上不起作用。你认为它是依赖问题吗?
  • 你的应用程序的其他地方一定有什么事情发生了,是的,但是从我坐的地方来说这可能有点不可能......听起来很奇怪,尽管除了选择之外其他一切都有效.嗯……
  • 是的,我也不确定,我得深入挖掘,看看有什么问题。
猜你喜欢
  • 2017-02-13
  • 1970-01-01
  • 2018-05-26
  • 2018-12-05
  • 1970-01-01
  • 2017-04-05
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多