Angular - 未在ngForm对象中捕获的选定选项

时间:2018-05-21 11:32:32

标签: angular typescript firebase ngmodel

已修改以删除不相关的代码。

我正在尝试将表单对象打印到控制台,但未显示所选选项。它在控制台中显示为 undefined

enter image description here

我已将代码放在下面。如果有人可以指导这个特定代码有什么问题,那将会很有帮助。如果需要任何其他信息,请与我们联系。

Component.html:

<form #f="ngForm" (ngSubmit)="save(f.value)">

....

  <div class="form-group">
    <label for="category">Category</label>
    <select ngModel name="category" id="category" class="form-control">
      <option value=""></option>
      <option *ngFor="let c of categories$ | async" [value]="c.key">
        {{ c.name }}
      </option>
    </select>
  </div>

....

Component.ts:

import { CategoryService } from './../../category.service';

....

export class ProductFormComponent implements OnInit {

  categories$;

  constructor(categoryService: CategoryService) {
    this.categories$ = categoryService.getCategories();
  }

  save(product) {
    console.log(product);
  }

....

Category.Service.ts:

import { AngularFireDatabase } from 'angularfire2/database';

....

  getCategories() {
    return this.db
      .list('/categories', ref => ref.orderByChild('name'))
      .valueChanges();
  }

....

我希望从Firebase数据库中突出显示要在对象中捕获的值。如果我输入c.name,我将获得用户友好名称。

Firebase database structure.

2 个答案:

答案 0 :(得分:0)

   func textViewDidChange(_ textView: UITextView) {
    ProfiletableView.beginUpdates()
    ProfiletableView.endUpdates()
   }

答案 1 :(得分:0)

我在下面的链接中找到了答案。我们应该使用.valueChanges()而不是.snapshotChanges(),因为前者返回一个没有任何元数据的Observable。

Upgrading to AngularFire 5.0

下面给出了带有更改的更新文件。

<强> Category.service.ts: 已将valueChanges()更改为snapshotChanges()

import { AngularFireDatabase } from 'angularfire2/database';

....

  getCategories() {
    return this.db
      .list('/categories', ref => ref.orderByChild('name'))
      .snapshotChanges();
  }

....

Component.html:在选择选项插值中,将c.name更改为c.payload.val().name

<form #f="ngForm" (ngSubmit)="save(f.value)">

....

  <div class="form-group">
    <label for="category">Category</label>
    <select ngModel name="category" id="category" class="form-control">
      <option value="blank"></option>
      <option *ngFor="let c of categories$ | async" [value]="c.key">
        {{ c.payload.val().name }}
      </option>
    </select>
  </div>

....