Angular2重置表单并标记为未触及

2024-03-13

提交后如何重置表单并标记为未触及、干净等,因为我停留在页面上并且用户可以重新提交

    this.myForm.reset()
    this.myForm.markAsPristine()
    this.myForm.controls['options_name'].markAsUntouched()

当我重置时,我收到带有红色下划线的验证错误。表单确实重置了,只是我收到了一个看起来很难看的验证错误。

<md-input-container>
  <input mdInput placeholder="Name" formControlName="options_name" style="color:#000000;font-size:14px;width: 110px;">
    <md-error *ngIf="myForm.controls['options_name'].hasError('required')">
          <strong>required</strong>
    </md-error>
</md-input-container>  

我希望它能帮助别人。

我相信所有经验丰富的开发人员都会找到解决方法。我认为下面的内容会对一些初学者有所帮助。

您可以定义自己的未更改变量作为替代方案,如下所示:

<div [hidden]="q_text.valid || q_text.pristine || isQTextUnTouched" class="warning">

然后在您的输入中添加 (ngModelChange)="onQTextChanged()"    ,如下所示:

<input type="text" id="q_text" autocomplete="off" size="40" required 
        [(ngModel)]="model.q_text" (ngModelChange)="onQTextChanged()" 
        name="q_text" #q_text="ngModel">

然后添加到 onQTextChanged() 中:

onQTextChanged() {
    this.isQTextUnTouched = false;
  }

然后每次重置表单时设置 this.isQTextUnTouched = true;

这就对了。

在我的应用程序中,一个组件(LoopQuestions)使用另一个组件(QuestionForm)中定义的表单循环问题。我确实在使用 RxJS 订阅的构造函数中将 this.isQTextUnTouched 重置为 true 。

为此,我使用来自的示例官方文档 https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service,但missioncontrol.component.ts(在我的例子中是LoopQuestions)将QuestionModel的新实例发送到astronaut.component.ts(在我的例子中是QuestionForm),而不是任务。 QuestionForm 不是 astronaut.component.ts 中的任务接受确认,而是确认表单已提交。然后 LoopQuestions 立即再次发送 QuestionModel 的新实例。

LoopQuestions 的构造函数:

  constructor(private route: ActivatedRoute, private router: Router, private newPollService: NewPollService) {
    newPollService.aQuestionCompleted$.subscribe(
      () => {
        this.q_number++;
        if (this.q_number > this.q_qnty) { this.router.navigate(['/home']); }
        this.goToNextQuestion();
      });
  }

  goToNextQuestion() {
    const nextQuestion = new QuestionModel( ... your default values ... );
    this.newPollService.announceQuestionStart(nextQuestion);
  }

QuestionForm 的构造函数:

  constructor(
      private router: Router,
      private newPollService: NewPollService
    ) {
    this.subscription = newPollService.questionLoopStarted$.subscribe(
      nextQuestion => {
        this.isQTextUnTouched = true;
        this.model = nextQuestion;
      }
    );
  }

LoopQuestion 的 html:

<div>
    <h4>New question - question # {{q_number}}:</h4>

  <app-question-form></app-question-form>

</div>

注意:我没有添加任何类型的 form.reset() 因为它会导致意外的行为。

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

Angular2重置表单并标记为未触及 的相关文章

随机推荐

  • 在 onPageFinished 事件之外将 Javascript 注入到 Web 视图中(使用 DatePicker 在 Web 视图的输入上设置日期)

    我有一个 Android 应用程序 运行一个加载特定页面的 WebView 也是该应用程序的一部分 我想使用 Android DatePicker 从用户那里获取日期 并在 WebView 页面内的输入上设置该值 当用户单击输入时 Date
  • UIWebView横向旋转不填充视图

    我的 UIWebView 遇到问题 当视图加载时 它会以任一方向加载 完美填充整个页面等 然而 如果我以纵向方式加载它 然后旋转设备 网络视图不会一直填充到右侧 我一生都无法弄清楚为什么 这是我的看法确实加载方法 void viewDidL
  • 创建 ViewModel:在模型数据可用之前还是之后进行?

    我有一个从数据源加载数据的 WPF 应用程序 在加载一些数据之前 没有任何内容可显示 我的问题是我是否 在任何数据可用之前创建V和VM 一旦可用 就在虚拟机中设置数据 一开始只创建V 等待数据可用 然后创建注入数据的虚拟机 仅在数据可用时创
  • 如何删除已删除的 git 子树文件夹的历史记录?

    我使用 git subtree 添加了一个 git 存储库 问题是我硬重置回使用 git subtree 添加存储库之前 现在提交历史记录仍在存储库中 但已与主服务器断开连接 知道如何删除它吗 我尝试了 git rm cached 但没有成
  • 跨多个表维护 Identity 值

    我们遇到的情况是 多个表中有一个名为 Customer Number 的列 该列是所有表中的标识列 但是有没有办法可以使该列在所有表中唯一 例如 如果我在 table one 中添加一行 并且标识列为其分配值 1 现在如果有人在 table
  • 从.ajax()调用加载knockout.js observableArray()

    这让我很困惑 这一定是我没看到的小事 我正在尝试加载一个非常简单的observableArray通过 ajax 调用进行淘汰赛 javascript we bind the array to the view model property
  • 抑制命令行输出

    我有一个像这样的简单批处理文件 echo off taskkill im test exe f gt nul pause 如果 test exe 未运行 我会收到以下消息 ERROR The process test exe not fou
  • 静态主类 - AS3

    有没有一种方法可以使主类 基于主 fla 的类 静态 所以我们可以像在java中一样使用它 能够从其他类引用它 因为我必须将main本身的实例作为参数传递给一个类 否则我会失去引用 我尝试添加静态前缀 但似乎 as3 不允许 AS3中没有静
  • 生成随机数一次

    我需要创建一组 0 到 800 之间的随机数 问题是目前我需要快速执行此操作 并且每个数字仅返回一次 我目前的做法是 创建一个std vector包含从 0 到 800 的数字 使用选择一个号码numberVector rand numbe
  • 如何正确读取 Flux 并将其转换为单个 inputStream

    我在用着WebClient和定制BodyExtractor我的 spring boot 应用程序的类 WebClient webLCient WebClient create webClient get uri url params acc
  • Blazor WebAssembly Visual Studio 调试器问题

    我创建了一个干净的 Blazor PWA 项目 当我尝试使用调试器运行它时 不到一半的时间它无法正确启动 一半的时间实际上会有所改善 如果尝试使用调试器 F5 或调试 开始调试 启动 则会打开一个新的浏览器窗口 其中 URL 为 about
  • 适用于 Swift 5 和 Facebook SDK 5 的 Facebook GraphRequest

    我最近更新了我的所有pods和快速的语言Swift 5在我的项目中 收到了大量错误消息 我已经慢慢解决了这些消息 然而 我在 Facebook 上遇到了困难GraphRequest之前工作正常 特别是此错误消息位于version的参数Gra
  • 如何将 Log4J2 复合配置与 Spring Boot 结合使用

    我使用 Spring Boot 2 0 1 starter 和 log4j2 使用以下 POM WAR 文件托管在 Tomcat 8 中 而不是使用嵌入式 tomcat 应用程序日志写入控制台而不是写入日志文件 显然 Spring Boot
  • javascript 中的 location.search 是什么

    我想知道什么location search substring 1 事实上确实如此 我在某个网站上看到了这段代码 我尝试使用打印alert 但这并没有给出任何结果 它应该提醒 location href 吗 alert location s
  • 使用 Xamarin 项目中的 netstandard13 包

    我正在尝试使 Npgsql NET 的 PostgreSQL 提供程序 可供 Xamarin 用户使用 Npgsql已经支持 NET Platform Standard 版本3 并且该标准的文档包含以下句子 如果库面向 NET Platfo
  • 在 Ruby on Rails 中,DateTime、Timestamp、Time 和 Date 之间有什么区别?

    根据我的经验 在编程时获得正确的日期 时间总是充满危险和困难 Ruby 和 Rails 在这方面一直让我困惑 只是因为有太多的选择 我从来不知道我应该选择哪个 当我使用 Rails 并查看 ActiveRecord 数据类型时 我可以找到以
  • 菜单栏隐藏时加速器停止响应

    我有一个基于空地的 gtk3 用户界面 并且我为几个菜单项设置了加速器字段 我不确定 GtkBuilder 在加载林间空地文件时到底在幕后做了什么 使用全局 GtkAccelGroup 但最终结果是 当我隐藏菜单栏时 加速器快捷键停止工作
  • 如何在Javascript中按百分比使一种颜色与另一种颜色相似

    我有两种十六进制形式的颜色 000000 and ffffff 我想按百分比将第一种颜色与第二种颜色近似 就像是 var percent 0 50 var color1 000000 var color2 ffffff var newcol
  • 与 emacs/slime 的其他 Lisp/Scheme 实现等效的 'lein swank'

    我一直在使用 emacs slime 来编码 lisp 但是使用 Clojure 我发现了 lein swank 我必须说它非常有用 因为我可以连接到运行 clojure 的服务器 其他 Lisp 实现怎么样 哪些 Lisp 实现提供了与
  • Angular2重置表单并标记为未触及

    提交后如何重置表单并标记为未触及 干净等 因为我停留在页面上并且用户可以重新提交 this myForm reset this myForm markAsPristine this myForm controls options name