在 Angular 2 模型驱动表单中设置选择控件的选定选项

2023-12-27

我在 SO 和其他地方研究了许多类似的现有答案,但就是找不到解决方案。

我使用 Angular 2 中的模型驱动方法来构建我的表单,该表单既是添加表单又是编辑表单。在编辑模式下,这些值将填充从服务检索的数据:这方面一切都很好,因为简单的文本输入都正确绑定。

其中一个属性是“Country”,这是一个对象,如下所示:

    export class Country {id: number; name: string;}

我想将其绑定到一个选择控件,该控件将包含可用国家/地区列表,以及加载表单时填充的模型中的国家/地区列表。我希望绑定的值是国家对象,而不仅仅是 ID。

这是选择控件的 html:

    <select class="form-control" id="country" formControlName="country">
          <option value="default">--Select a country--</option>
          <option *ngFor="let c of countries" [value]="c">{{c.name}}      </option>
</select> 

这是我尝试填充组件类中的值的地方:

    (<FormControl>this.personForm.controls['country'])
 .setValue(this.person.country, { onlySelf: true });

但是,即使控制台确认 this.person.country 存在并填充了正确的对象,页面加载时也没有选定的选项。

我可以让它与 ids 一起工作:在视图中更改为 [value]="c.id" 并在类中附加 .id,然后它就可以选择正确的选项。问题是 select 不再发出国家属性的对象,而只是发出 id。我尝试将 [value] 更改为 [ngValue] 并得到相同的结果。我什至将 [ngModel]="country" 添加到选择元素中,但这也没有帮助。

我将不胜感激任何帮助。


问题很可能是this.person.country不一样country就像你的countries array.

如果我们想让它们相同,我们可以显式订阅valueChanges选择控件或绑定的[(ngModel)] to person.country:

订阅更改

code

this.countryForm.controls['country'].valueChanges.subscribe(country => 
  this.person.country = country;
);

// initialize by finding the correct country object (this will overwrite the person's country object)
this.countryForm.controls['country'].setValue(countries.filter(c => c.id === person.country.id));

template

ng模型绑定

我们仍然必须使对象匹配(比较 Angular 2 使用的策略,这实际上是 JS 使用的策略)

code

this.person.country = this.countries.filter(c => c.id === this.person.country.id)[0];

template

<select class="form-control" id="country" formControlName="country" [(ngModel)]="person.country">
    <option value="default">--Select a country--</option>
    <option *ngFor="let c of countries" [ngValue]="c">{{c.name}}</option>
</select>

ngModel Plunker: http://plnkr.co/edit/UIS2V5rKh77n4JsjZtii?p=preview http://plnkr.co/edit/UIS2V5rKh77n4JsjZtii?p=preview

订阅笨蛋: http://plnkr.co/edit/yyZ6ol1NPD77nyuzwS2t?p=info http://plnkr.co/edit/yyZ6ol1NPD77nyuzwS2t?p=info

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Angular 2 模型驱动表单中设置选择控件的选定选项 的相关文章

随机推荐

  • 浮点和定点表示的优缺点[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在过去的三天里 我一直在尝试理解浮点表示和定点表示之间的确切区别 我在阅读这些材料时感到困惑 无法确定什么是对的 什么是错的 问题之一
  • 将查询结果传递到存储过程

    我有一个接受三个参数的存储过程 是否可以使用查询作为输入来调用此存储过程 举个例子 我有tableA SELECT FROM TABLEA A B C 1 2 3 4 5 6 现在 有什么方法可以调用 EXEC sp name SELECT
  • 2D瓦片地图生成

    对于 2D 图块引擎 我正在研究地图生成算法 我尝试了高度图生成 山地一代 柏林噪声 菱形方形 适合具有高度组件的图块地图 但我有草 海 沙漠等精灵 它们的放置方式应如下所示 一切都从海洋开始 岛屿被放置在地图的中间 这是我尝试的算法大多失
  • 如何从随机网页中抓取文本和图像?

    我需要一种方法来直观地表示互联网上的随机网页 比如说this https www reddit com r food comments 85rm0d homemade chocolate banana bread with nuts 网页
  • 如何存储历史数据[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我和一些同事就存储历史数据的最佳方式进行了争论 目前 对于某些系统 我使用单独的表来存储历史数据 并为当前活动记录保留原始表 所以 假设我有
  • 如何在android中的后者边界内打开另一个应用程序内的应用程序?

    如何在android中的后者边界内打开另一个应用程序内的应用程序 即 类似于 HTML 中的 iframe 的作用 你基本上不能 这违反了Android的规则 您最多能做的就是打开一个网页作为应用程序的一部分 这是使用 webView 完成
  • LevelDB 与 std::map

    在我们的应用程序中我们使用std map存储 键 值 数据并使用序列化将该数据存储在磁盘上 通过这种方法 我们发现磁盘 I O 是性能瓶颈 并且使用 key 查找值并不是很快 我遇到过 LevelDB 并考虑使用它 但我有一些问题 Leve
  • 为什么 `;;` 在 utop 中给我一个语法错误?

    我正在开发一个简短的项目 将小程序从 python 转换为 java 反之亦然 我创建了以下代码 并在 utop 中进行了测试 let c let x for int i 0 i lt 10 i and y for i in range 0
  • 在 bash 脚本/命令中,如何发出 PC 蜂鸣声或播放声音文件?

    我有一些长时间运行的脚本 需要输入 交互才能继续 但是当我切换到另一个窗口时 我希望收到 通过声音 通知任务已完成并且正在等待输入 我希望能够播放音频剪辑 mp3 ogg 等 但不关心唯一的解决方案是否是让 PC 扬声器发出蜂鸣声 有任何想
  • 如何从 UIView 类的 xib 文件导航到 ViewController

    我的 xib 文件中有一个包含按钮的视图 当我按下按钮时我想移动到 ViewController IBAction 我使用了下面的代码 let storyBoard UIStoryboard UIStoryboard name Main b
  • 从本地通知启动关闭的 iOS 应用程序

    当我的 iOS 应用程序在后台运行时 它响应良好 void application UIApplication application didReceiveLocalNotification UILocalNotification noti
  • Python 中的元组和 CSV 读取器

    尝试一些相对简单的事情 首先 我有一个以元组为键的字典 如下所示 0 1 1 0 索引 1 我正在读取一个 CSV 文件 该文件具有一组相应的字段 其中包含这些零和一的各种组合 例如 CSV 中的行可能会读取 0 1 1 0 而无需任何引号
  • 按值对 dict 进行排序,然后如果按键相等

    我创建了一个字典 键 列表中的单词值 它们的数量 想要按计数 值 对它们进行排序 那么如果计数相等 则按 alpha 键 对它们进行排序 a to be or not to be ae ae w for i in a w i a count
  • Java 中的嵌套枚举

    我想嵌套一些枚举 我代表的对象是标志 具有类型和值 有离散数量的类型 每种类型都有一组不同的可能值 因此 如果类型 A 可以有值 1 2 或 3 而类型 B 可以有值 4 5 6 我希望能够执行以下操作 Flag f Flag A 1 f
  • 我应该如何将 try-with-resources 与 JDBC 结合使用?

    我有一种使用 JDBC 从数据库获取用户的方法 public List
  • 如何在idea中调试play2?

    我在互联网上找到了一些文章和谷歌小组上的一些讨论 但它们不再起作用了 最新的play2 RC3如何做到这一点 您可以从控制台以调试模式启动播放服务器 docs http www playframework org documentation
  • 如何在 MATLAB 图形中设置子图大小?

    我经常需要将 10 个图像绘制在一起 但使用此代码会产生小图像 img rand 400 600 for i 1 10 subplot 2 5 i imshow img title Image int2str i end 正如您所看到的 图
  • 将 Selenium 与 Brave Browser 一起使用,传递用 python 编写的服务对象

    TLDR 我想使用勇敢的浏览器和用 python 编写的 selenium 但找不到任何当前有效的解决方案 这段代码有效 from selenium import webdriver option webdriver ChromeOptio
  • 如何在Thymeleaf和Spring Boot中显示消息?

    我创建了一个使用 Thymeleaf 作为模板引擎的 Spring Boot Web 应用程序 我配置了MessageSource在子文件夹中查找邮件 Bean public MessageSource messageSource fina
  • 在 Angular 2 模型驱动表单中设置选择控件的选定选项

    我在 SO 和其他地方研究了许多类似的现有答案 但就是找不到解决方案 我使用 Angular 2 中的模型驱动方法来构建我的表单 该表单既是添加表单又是编辑表单 在编辑模式下 这些值将填充从服务检索的数据 这方面一切都很好 因为简单的文本输