Как программно изменить изначальное свойство в угловой форме 2 без ng-модели

Я новичок в фреймворке Angular 2. Я ценю любую помощь.

У меня есть обычный компонент в angular 2:

import {FORM_DIRECTIVES, FormBuilder, Validators} from 'angular2/common';

export class TestComponent {
    public values = ['value1', 'value2', 'value3', 'value4'];
}

Затем я ввожу FormBuilder в функцию-конструктор:

@Inject(FormBuilder) public fb

HTML содержит следующую разметку:

<input [(ngModel)]="formData.title" type="text" class="form-control" ngControl="title">

Title and description works great. But I've added bootstrap dropdown and it has no any form element.

<div *ngFor="#value of values" (click)="onValueChanged(value)" class="dropdown-item">{{value}}</div>

Итак, проблема в том, что html-разметка не содержит никакой модели. Я пытался решить эту проблему, создав функцию onValueChanged

 onValueChanged(value){
    this.formData.controls.value.updateValue(value);
    this.formData.value = value;
    console.log(this.formData.pristine) //Still true :(
}

Обе эти строки не работают, потому что this.formData.pristine не изменяется после изменения раскрывающегося списка.

Пока думаю как обновить FormBuilder, хорошо бы какие-то методы, например this.fb.update()


person Oleksii    schedule 10.05.2016    source источник


Ответы (1)


Вы можете удалить статус pristine, используя

this.formData.controls.value.markAsDirty();

Нынешние возможности весьма ограничены. См. также https://github.com/angular/angular/issues/4933.

person Günter Zöchbauer    schedule 10.05.2016
comment
Если это ответ на ваш вопрос, пожалуйста, примите ответ, чтобы показать, что проблема решена. Если вы хотите дождаться альтернативных ответов, вам не нужно их принимать. Вы также можете сделать другой ответ принятым ответом в любое время. - person Günter Zöchbauer; 10.05.2016
comment
@GünterZöchbauer, как сделать то же самое в формах, управляемых шаблонами? Если у меня есть форма, объявленная как #myForm="ngForm" , и доступ к myForm.form.controls.value в функции дает undefined! - person yashhy; 22.12.2016
comment
Вам также нужно @ViewChild('myForm') myForm;, чтобы иметь возможность получить доступ к форме из кода компонентов. myForm не будет установлен при выполнении конструктора. Кроме того, вы можете использовать this.myForm.get('controlName').... - person Günter Zöchbauer; 22.12.2016