0

编辑删除不相关的代码。

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

在此处输入图像描述

我已经把代码放在下面了。如果有人可以指导此特定代码有什么问题,那将很有帮助。让我知道是否需要任何其他信息。

组件.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>

....

组件.ts:

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

....

export class ProductFormComponent implements OnInit {

  categories$;

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

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

....

类别.Service.ts:

import { AngularFireDatabase } from 'angularfire2/database';

....

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

....

我想从 Firebase 数据库中突出显示要在对象中捕获的值。如果我把 c.name 我得到用户友好的名称。

Firebase 数据库结构。

4

2 回答 2

0
//you need to bind object field in selection [(NgModel)] like below example


    <select [(ngModel)]="urobject.category" name="category" id="category" class="form-control">
          <option value=""></option>
          <option *ngFor="let c of categories$ | async" [value]="c.key">
            {{ c.name }}
          </option>


     </select>
于 2018-05-21T11:56:07.360 回答
0

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

升级到 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>

....
于 2018-05-22T07:29:57.727 回答