Angular 2 - 获取 Observable 中已更改的 FormControl 的值

2023-12-29

我有一个简单的表单FormBuilder:

this.contactForm = formBuilder.group({
  'name': [''],
  'email': [''],
  'phone': [''],
});

我想观察每个控件的更改,并在发生这种情况时使用更新后的值运行函数:

getContacts(value: any) {
    this.phoneContacts.findContact(value).then(
        contacts => {
            // do something
        }
    );
}

现在,我正在为每个控件执行此操作,使用bind能够访问this组件的对象:

this.contactForm.get('name').valueChanges.subscribe(this.getContacts.bind(this));
this.contactForm.get('email').valueChanges.subscribe(this.getContacts.bind(this));
this.contactForm.get('phone').valueChanges.subscribe(this.getContacts.bind(this));

有没有什么方法可以观察变化并仅通过一次订阅即可获得更新的值?我知道我可以直接订阅this.contact.form,但随后我将所有控件作为值,而不只是更新的控件。


您可以使用合并运算符将 3 个单独的可观察量合并为一个。这将为您提供一个可观察的值,只要任何一个表单字段值发生变化,它就会发出单个值。

this.contactForm.get('name').valueChanges
    .merge(this.contactForm.get('email').valueChanges)
    .merge(this.contactForm.get('phone').valueChanges)

上述方法的主要问题是您现在不知道哪个值与哪个表单控件对应。一种解决方案是将值更改映射到另一个包含该值和控件(即值的来源)的对象

// making some local variables for convenience
let name = this.contactForm.get('name')
let email = this.contactForm.get('email'
let phone = this.contactForm.get('phone')

name.valueChanges.map(v => ({control: name,value: v})
    .merge(email.valueChanges.map(v => ({control: email, value: v}))
    .merge(phone.valueChanges.map(v => ({control: phone, value: v}))  

这将给出一个每当任何字段发生变化时都会发出的可观察对象,并且它发出的值将是一个包含该值和发出该值的控件的对象。

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

Angular 2 - 获取 Observable 中已更改的 FormControl 的值 的相关文章

随机推荐

  • 如何使用 JWT + HttpOnly Cookie 正确刷新令牌?

    我已经使用 JWT HttpOnly Cookies 在我的 AspNetCore API 应用程序中成功设置了身份验证 灵感来自this https stormpath com blog token authentication asp
  • Rails 3:无法验证 CSRF 令牌的真实性

    当我尝试通过 REST 客户端发布数据时 我收到这样的警告 Warning Can t verify CSRF token authenticity 怎么解决这个问题 我相信你正在努力做一个POST from a link 默认情况下lin
  • 如何将 PHP 的 stream_select() 与 zlib 过滤器结合使用?

    我目前有一个用 PHP 编写的服务器守护进程 它接受传入连接并使用以下命令为它们创建网络流stream socket 函数并使用轮询活动流stream select 我希望能够添加一个 zlib 过滤器 使用string filter ap
  • Django 版本 1.5:“url”需要非空的第一个参数。 Django 1.5 中的语法发生了变化

    我开始使用 Django 1 5 版 但我的旧代码出现了问题 a href h3 post title h3 a 错误 url 需要非空的第一个参数 Django 1 5 中的语法发生了变化 请参阅文档 文件 一个值得注意的已弃用功能是转向
  • 当单词以 n-gram 开头时,Elasticsearch Edge NGram 分词器得分更高

    假设与 Edge NGram Tokenizer 有以下映射 settings analysis analyzer autocomplete analyzer tokenizer autocomplete tokenizer filter
  • 不同活动中的相同导航抽屉

    我制作了一个工作导航抽屉 如教程中所示开发者 android com http developer android com网站 但现在 我想使用一个导航抽屉 它是我在 NavigationDrawer class 中为我的应用程序中的多个活
  • Python、Unicode 和 Windows 控制台

    当我尝试printWindows 控制台中的字符串 有时我会收到一条错误消息UnicodeEncodeError charmap codec can t encode character 我认为这是因为 Windows 控制台无法处理所有
  • mediawiki mathjax需要使用转义$x$

    我将 MediaWiki 与 MathJax 一起使用 因为很多页面都有数学方程 但在某些页面上 我还需要按原样显示字符串 x 有什么办法可以转义 x 这样它就不会调用 MathJax 并显示为斜体 x 吗 MathJax 支持 来转义表达
  • 在 swift 中如何理解设置为 private 的全局变量?

    我正在完成一本书中的核心数据练习 它首先创建一个单例的帮助器类 我知道全局变量可以在类的范围之外创建 并且可以在整个项目中访问 但是令我困惑的是 书中的一个示例创建了一个全局变量并将其设置为私有 我假设通过将变量设置为私有 它只能由该特定类
  • Gekko 返回错误的成功解决方案

    以下代码返回Successful Solution Objective 0 但这不是最佳解决方案 最优解是 6 通过阅读其他问题 我认为这是在目标函数中使用非 Gekko 函数的问题 但我使用的唯一非 Gekko 函数是np matmul
  • Laravel Passport 令牌生命周期

    我不明白我做错了什么 我无法设置令牌过期时间
  • JTable 单元格闪烁

    我正在使用 Java 中的 Swing 库编写一个应用程序 我有一个扩展的表格组件JTable 在这个组件中我重写了该方法getTableCellRendererComponent 因为我为表格的单元格着色 我有一个自定义表模型 从默认表模
  • 截击超时错误

    我正在尝试使用 Volley 拨打休息服务 public class AuthFunctions private static final String LOGIN URL http 10 0 2 2 8080 stewayservices
  • 如何防止PDF页面大小调整?

    我想要一个 pdf 文件 其中实际尺寸与打印时适合页面的尺寸之间没有差异 我尝试使用以下示例 但不起作用 仅锁定宽度 而不锁定高度 有什么解决办法吗 package etiq import java io FileOutputStream
  • Pip 在 AWS Lambda 中安装 Python 包?

    我正在尝试在 AWS Lambda 函数中 pip install 包 Amazon 推荐的方法是创建一个压缩的部署包 其中包含依赖项和 python 函数 如Python 中的 AWS Lambda 部署包 https docs aws
  • 调试 IE 崩溃

    我有一个 Web 应用程序在 Chrome 和 FireFox 中运行良好 但在 IE 中崩溃 请注意 这不是 JavaScript 错误 而是 iexplore exe 进程实际上崩溃了 代码发布在下面 这将在 IE9 中崩溃 当单击该按
  • Angular 1.6.0:“可能未处理的拒绝”错误[重复]

    这个问题在这里已经有答案了 我们在 Angular 应用程序中有一个解决承诺的模式 该模式在 Angular 1 6 0 之前一直为我们提供良好服务 resource get promise then function response d
  • Laravel sainttum 更改 csrf cookie 路由

    我怎样才能将 laravel sainttum csrf cookie 路由更改为 api sanctum csrf cookie 我尝试将其添加到 api php 路由中 use Laravel Sanctum Http Controll
  • 使用 Java 中的 Lambda 函数进行 AWS S3 事件通知

    我正在尝试使用 Lambda 函数进行 S3 Put 事件通知 当我在 S3 存储桶中放置 添加任何新的 JSON 文件时 应该调用我的 Lambda 函数 我面临的挑战是没有足够的文档来用 Java 实现这样的 Lambda 函数 我找到
  • Angular 2 - 获取 Observable 中已更改的 FormControl 的值

    我有一个简单的表单FormBuilder this contactForm formBuilder group name email phone 我想观察每个控件的更改 并在发生这种情况时使用更新后的值运行函数 getContacts va