角形输入值未定义

Dra*_*axy 4 forms typescript angular angular4-forms

我正在尝试以我的第一个Angular形式获取输入字段的值,但是它始终是未定义的,而且我不知道为什么。我正确地导入了FormsModule,并且可以很好地引用表单对象,因此我必须缺少明显的东西。

我的组件HTML

<form #searchValue='ngForm' class="" (ngSubmit)='submitSearch(searchValue)'>
  <div>
    <input type="text" name="q" placeholder="search">
  </div>
</form>
Run Code Online (Sandbox Code Playgroud)

和我的组件ts方法(缩短)

import { Component, OnInit } from '@angular/core';
import { FormsModule } from '@angular/forms';

@Component({
  selector: 'google-search',
  templateUrl: './google.component.html',
  styleUrls: ['./google.component.css']
})

export class GoogleComponent implements OnInit {

  constructor() { }

  ngOnInit() {

  }

  submitSearch(formData) {
    console.log(this.searching);
    console.log(formData.value.q);    
  }
}
Run Code Online (Sandbox Code Playgroud)

有什么想法为什么呢?

Mar*_*mek 6

您需要用标记输入,ngModel以便angular会知道这是表单的控件之一:

<input type="text" ngModel name="q" placeholder="search">
Run Code Online (Sandbox Code Playgroud)

或者,您可以先在组件中定义变量,然后通过[(ngModel)]指令将输入绑定到该变量:

export class GoogleComponent implements OnInit {
  q: string;

  submitSearch() {
    console.log(this.q);
  }
}

<form class="" (ngSubmit)='submitSearch()'>
  <div>
    <input type="text" name="q" [(ngModel)]="q" placeholder="search">
  </div>
</form>
Run Code Online (Sandbox Code Playgroud)

[ngModel]="q"如果您只想从输入中读取值,则一种绑定方式(just )就足够了。