当前位置: 首页 > 知识库问答 >
问题:

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

洪浩波
2023-03-14

编辑以删除不相关的代码。

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

我已经把代码放在下面了。如果有人能够指导这个特定代码的错误,这将是很有帮助的。如果需要任何其他信息,请告诉我。

组成部分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,我将得到用户友好的名称。

共有2个答案

勾通
2023-03-14

我在下面的链接上找到了答案。而不是。valueChanges()我们应该使用。snapshotChanges(),因为前者返回一个不带任何元数据的可观察值。

升级到AngularFire 5.0

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

类别服务ts:已将valueChanges()更改为snapshotChanges()

import { AngularFireDatabase } from 'angularfire2/database';

....

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

....

组成部分html:在选择选项插值中,将c.name更改为c.payload。val()。名称

<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>

....
翟俊远
2023-03-14
//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>
 类似资料:
  • 问题内容: 尝试在angularjs中选择关于对象值的多个选项 这是一个代码: 和html jsfiddle上的(非)工作示例 http://jsfiddle.net/andrejkaurin/h9fgK/ 问题答案: 您尝试使用选择倍数(如复选框列表),这有点奇怪。多选输出一个数组。您不能将ng- model放在这样的选项标签上,而是放在选择本身上。因此,由于select将输出值数组,因此您需要

  • 我有选择权。如何设置为var选择自动选择? 例如,我手动选择选项1,它自动 <代码> 编辑我发现了。

  • 我有两个<代码> 当用户从第一个选择框中选择一个值时,我希望第二个选择框只显示连接的值。 我的代码: 因此,当用户从第一个选择框M中选择“test1”时,他在第二个选择框上只会看到“test2”、“test3”和“test4”;第一个框中的“test2”将在第二个框中显示“test6”、“test7”和“test8”。 如何使用JavaScript解决此问题?

  • 问题内容: 我正在尝试以减轻痛苦的适当方式进行操作,但是我无法弄清楚如何处理ng-model并将其绑定到所选列表等,而且我需要在以后填充该列表并保留所选对象在里面。 每次填充列表时,我都必须覆盖类别,因为它将从服务器中拉出。 所以我想我需要数组,第二个数组将容纳所选对象? 如果我是对的,如何预选复选框? 我是否需要ng-click命令调用自定义函数才能将所选对象存储在另一个数组中? 我需要在复选框

  • 问题内容: 在Python,Java和其他几种硒绑定中,在HTML结构(class)上有一个非常方便的抽象。 例如,假设有以下标记: 这是我们如何在Python中操作它的方法: 换句话说,这是一个 非常透明且易于使用的抽象 。 可以类似的方式 在量角器* 中操纵标签吗? * 这与下拉式量角器e2e测试中的“如何选择选项”或量角器测试中的“选择”框中的如何单击选项不是重复的?。 问题答案: 在量角器