Задать вопрос
@Natalia25

Как работать с полями для ввода Angular2?

Есть исходный текст, в котором определенные слова заменены полями для ввода -в моем примере слова orange, blue. Пример6ee3b79a42414de998173227f9b27fff.png

Я хочу вводить слова и по нажатию на кнопку ок сделать проверку - если ввела верные слова (в первом поле orange, во втором blue), то должно отобразиться два alert сообщения, одно за другим - "Верно", если в первом ошибка, во втором верно то "Неверно", "Верно", и т.д....
Вот мой код, здесь все готово, кроме того, что я не могу подвязаться к вводимому значению, оно отображается, а достать его я не могу...подскажите, пожалуйста, что делать? Буду очень признательна за любую подсказку и помощь...
Если я правильно понимаю, то надо достать значение value из f?...

import { Component, OnInit, ViewChildren} from '@angular/core';
import { DataService } from '../sample02-simpleService/data.service';

@Component({
  moduleId: module.id,
  selector: 'part2',
  template: `    
    <fill-in-blank [textline]="itemsSource" [fields]="abc" (valueChanged)="printValue($event)"></fill-in-blank>

    <p>{{values}}</p>
<p>{{itemsSource}}</p>
    <p>{{abc}}</p>
    <button (click)="check()">Ok</button>
    <input/>
  `,
  // styleUrls: ['app/part1/part1.component.css'],
  providers: [DataService]

})
// @Pipe({name: 'replacer'})
export class Part2Component implements OnInit {

 // @ViewChildren ('prix') inputs;
  public itemsSource: string;
  public abc: string[];
   public values: string[];
  // values = '';
  constructor(public dataService: DataService) {
  }

  ngOnInit() {
    this.abc = this.dataService.getData3();
    this.itemsSource = this.dataService.getData2();

  }
  printValue($event: any) {
    // $event is arrays of values
    this.values += $event;
  }
  check () {

  // alert(f(Object.keys(f)[0]));

  }
}


Это компонет, который был использован..

import { Component, EventEmitter, OnInit, Input, Output } from '@angular/core';

@Component({
  selector: 'fill-in-blank',
  template: `
    <form #f="ngForm" (ngSubmit)="onSubmit(f)">
    <ng-container *ngFor="let text of texts; let i = index">
      {{text}}<input *ngIf="i!==texts.length-1" type="text" name="{{i}}" ngModel #prix="ngModel" [id]="i" (ngModelChange)="onValueChange()">
    </ng-container>
    </form>
    <pre>{{f.value | json}}</pre>
  
  `
})
export class FillInBlankComponent implements OnInit {

  @Input() textline: string;

  @Input() fields: string[];

  @Output() valueChanged = new EventEmitter();

  texts: string[];

  value: string[] = [];

  constructor() {
  }


  ngOnInit() {

    let regex = null;
    if (this.fields && this.fields.length > 0) {
      regex = new RegExp(this.fields.join("|"), 'gi');
    }

    this.texts = this.textline.split(regex);
  }

  onValueChange() {
    this.valueChanged.emit(this.value);
  }
}
  • Вопрос задан
  • 504 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
ozknemoy
@ozknemoy
яваскриптист
вы переназначаете #prix="ngModel" в цикле и что там у вас на выходе не понятно. один из вариантов достать значение f : f.value[nameOfSomeControl] надо пробросить саму форму и имя инпута в контроллер (nameOfSomeControl). а так как имя задается по индексу(name="{{i}}") то добавяем в инпут (ngModelChange)="onValueChange(f,i)

<input *ngIf="i!==texts.length-1" type="text" name="{{i}}" ngModel  [id]="i" (ngModelChange)="onValueChange(f,i)">


и обработчик в контроллере
onValueChange(f.i) {
    this.valueChanged.emit(f[i]);
  }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
28 дек. 2024, в 19:01
1500 руб./за проект
28 дек. 2024, в 18:56
1500 руб./за проект
28 дек. 2024, в 18:50
1200 руб./в час