使用Angular 6设置输入字段的值

Mik*_*123 4 typescript angular

我在使用Angular设置输入元素的值时遇到了一些麻烦.

我试图通过此方法在我的应用程序中设置动态创建的输入元素的值:

copyPricingToAll(): void {
  var copyValue: string = document.getElementById("priceInputGlobal").value;

  this.currentItem.orderLines.forEach(orderLine => {
  document.getElementById("priceInput-" + orderLine.id).setAttribute("value", copyValue);
   });
  }
Run Code Online (Sandbox Code Playgroud)

我正在创建这样的行:

<ng-container *ngFor="let orderLine of currentItem.orderLines let i=index">
    <tr>
       <td>{{getCorrectTimeString(orderLine)}}</td>
       <td>{{orderLine.quantity}}</td>
       <td><input id="priceInput-{{orderLine.id}}" type="number" value="{{orderLine.price}}"></td>
    </tr>
</ng-container>
Run Code Online (Sandbox Code Playgroud)

不幸的是.value不被认为是有效的操作.我不确定如何在angular中正确设置动态创建元素的值.我希望有人能够帮助我解决这个问题.

Wil*_*ore 24

您应该使用以下内容:

       <td><input id="priceInput-{{orderLine.id}}" type="number" [(ngModel)]="orderLine.price"></td>
Run Code Online (Sandbox Code Playgroud)

您需要在以下部分中添加FormsModule到您app.moduleinputs部分:

import { FormsModule } from '@angular/forms';

@NgModule({
  declarations: [
    ...
  ],
  imports: [
    BrowserModule,
    FormsModule
  ],
  ..
Run Code Online (Sandbox Code Playgroud)

围绕的括号的使用ngModel如下:

  • []它从你的TS文件取得输入表演.此输入应为公共成员变量.从TS到HTML的单向绑定.

  • ()它的TS文件以输出HTML文件到一个变量表演.从HTML到TS的单向绑定.

  • [()]都(如双向绑定)

有关更多信息,请参见此处:https: //angular.io/guide/template-syntax

我还建议用id="priceInput-{{orderLine.id}}"这样的东西替换[id]="getElementId(orderLine)",getElementId(orderLine)返回TS文件中的元素Id,并且可以使用任何你需要引用的元素(以避免简单的错误,比如priceInput1在一个地方和priceInput-1另一个地方调用它.(如果你仍然需要在其他地方通过它的Id访问输入)


sab*_*ker 8

或者,您可以使用反应形式。这是一个例子:https : //stackblitz.com/edit/angular-pqb2xx

Template

<form [formGroup]="mainForm" ng-submit="submitForm()">
  Global Price: <input type="number" formControlName="globalPrice">
  <button type="button" [disabled]="mainForm.get('globalPrice').value === null" (click)="applyPriceToAll()">Apply to all</button>
  <table border formArrayName="orderLines">
  <ng-container *ngFor="let orderLine of orderLines let i=index" [formGroupName]="i">
    <tr>
       <td>{{orderLine.time | date}}</td>
       <td>{{orderLine.quantity}}</td>
       <td><input formControlName="price" type="number"></td>
    </tr>
</ng-container>
  </table>
</form>
Run Code Online (Sandbox Code Playgroud)

Component

import { Component } from '@angular/core';
import { FormGroup, FormControl, FormArray } from '@angular/forms';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name = 'Angular 6';
  mainForm: FormGroup;
  orderLines = [
    {price: 10, time: new Date(), quantity: 2},
    {price: 20, time: new Date(), quantity: 3},
    {price: 30, time: new Date(), quantity: 3},
    {price: 40, time: new Date(), quantity: 5}
    ]
  constructor() {
    this.mainForm = this.getForm();
  }

  getForm(): FormGroup {
    return new FormGroup({
      globalPrice: new FormControl(),
      orderLines: new FormArray(this.orderLines.map(this.getFormGroupForLine))
    })
  }

  getFormGroupForLine(orderLine: any): FormGroup {
    return new FormGroup({
      price: new FormControl(orderLine.price)
    })
  }

  applyPriceToAll() {
    const formLines = this.mainForm.get('orderLines') as FormArray;
    const globalPrice = this.mainForm.get('globalPrice').value;
    formLines.controls.forEach(control => control.get('price').setValue(globalPrice));
    // optionally recheck value and validity without emit event.
  }

  submitForm() {

  }
}
Run Code Online (Sandbox Code Playgroud)


小智 8

您可以使用 3 种方式。他们是,

1)使用ngModel

<input placeholder="Search..." autocomplete="off" [(ngModel)]="customSearch"/>

customSearch: string;
this.customSearch: string = "";
Run Code Online (Sandbox Code Playgroud)

2)使用表单控件名称

<form [formGroup]="searchForm">
<input placeholder="Search..." autocomplete="off" formControlName="customSearch"/></form>

this.searchForm = this._fb.group({
  'customSearch': ['']
 });

this.searchForm.controls['customSearch'].setValue('');
let val = this.searchForm.value.customSearch;
Run Code Online (Sandbox Code Playgroud)

3)使用ElementRef

<input placeholder="Search..." autocomplete="off" #customSearch />

@ViewChild('customSearch', { static: true }) customSearchElement: ElementRef;
this.customSearchElement.nativeElement.value = "";
Run Code Online (Sandbox Code Playgroud)