首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型驱动形式的双向数据绑定

模型驱动形式的双向数据绑定
EN

Stack Overflow用户
提问于 2016-11-24 07:58:42
回答 4查看 4.4K关注 0票数 4

我有一个反应性的形式,其中,我有一个名字,一个姓,最后显示名称文本框。当我给出名字和姓氏时,显示名称文本框的值应该包含连在一起的名字和名字。但由于我还在学习阶段,无法找出这段代码的问题所在。任何建议都会有帮助。谢谢。

这里是我的代码

代码语言:javascript
复制
  <form [formGroup]="myForm" novalidate (ngSubmit)="save(myForm.value, myForm.valid)">
    <div class="form-group">
      <label for="">First Name</label>
      <input type="text" class="form-control" formControlName="firstname" [(ngModel)]="firstname">
    </div>
    <div class="form-group">
      <label for="">Last Name</label>
      <input type="text" class="form-control" formControlName="lastname" [(ngModel)]="secondnamename">
    </div>
    <div class="form-group">
      <label for="">Display Name</label>
      <input type="text" class="form-control" formControlName="displayname" value='{{firstname}}{{lastname}}'>
    </div>
    <div class="margin-20">
      <div>myForm details:-</div>
      <pre>myForm value: <br>{{myForm.value | json}}</pre>
    </div>
  </form>

这是我的长袍

全球综合框架:

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-11-24 08:28:38

您还可以采取更“被动”的方法,并听取以下形式的更改:

代码语言:javascript
复制
   this.myForm.valueChanges.subscribe((form) => {
     this.displayname = `${form.firstname} ${form.secondname}`;
   });

然后,您甚至可以消除用于firstnamesecondname的不必要的双向数据绑定(以及相应的本地状态)。见柱塞:https://plnkr.co/edit/h5aFRDTWfj0gQ69CvVK7?p=preview

票数 3
EN

Stack Overflow用户

发布于 2016-11-24 08:11:42

像这样的东西应该能工作(在:https://angular.io/docs/ts/latest/guide/user-input.html之后)

在模板中:

代码语言:javascript
复制
 <div class="form-group">
  <label for="">First Name</label>
  <input type="text" class="form-control" formControlName="firstname" [(ngModel)]="firstname" (keyup)="onKey($event)>
</div>
<div class="form-group">
  <label for="">Last Name</label>
  <input type="text" class="form-control" formControlName="lastname" [(ngModel)]="secondname" (keyup)="onKey($event)>
</div>
<div class="form-group">
  <label for="">Display Name</label>
  <input type="text" class="form-control" formControlName="displayname" value='{{displayname}}'>
</div>

在component.ts中:

代码语言:javascript
复制
onKey(event:any) { 
displayname = firstname + ' ' + secondnamename;
}
票数 0
EN

Stack Overflow用户

发布于 2016-11-24 08:20:56

对于您来说,第一个问题显示名称不是更新第二个名称-

这是因为您在那里有错误,您必须让model值在那里而不是formControlName检查代码更新刨床

代码语言:javascript
复制
 <form [formGroup]="myForm" novalidate (ngSubmit)="save(myForm.value, myForm.valid)">
    <div class="form-group">
      <label for="">First Name</label>
      <input type="text" class="form-control" formControlName="firstname" [(ngModel)]="firstname">
    </div>
    <div class="form-group">
      <label for="">Last Name</label>
      <input type="text" class="form-control" formControlName="lastname" [(ngModel)]="secondnamename">
    </div>
    <div class="form-group">
      <label for="">Display Name</label>
      <input type="text" class="form-control" formControlName="displayname" value='{{firstname}} {{secondnamename}}'> //change in this line
    </div>
    <div class="margin-20">
      <div>myForm details:-</div>
      <pre>myForm value: <br>{{myForm.value | json}}</pre>
    </div>
  </form>

如果要更新Display Name的表单值,就必须触发如下事件

this.element.nativeElement.dispatchEvent(new Event('input'));

或组件中的任何其他事件(前两个文本框的onBlur、onClick、onFocus )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40780816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档