#angular #angular2-forms
#angular #angular2-формы
Вопрос:
Я пытаюсь получить значение моей формы в ngAfterViewInit. К сожалению, он всегда пуст. Я испытываю что-то вроде: {"name1":null, "name2": null}
но я получаю { }
.
В документации говорится следующее о ngAfterViewInit
:
вызывается после инициализации представлений компонента и дочерних представлений.
Я предполагаю, что форма создается на этом этапе, но тогда почему мое значение пустое?
Мой html:
<form novalidate #form="ngForm">
// <Item 1...
// <Item 2...
<button type="submit" (click)="search()" class="btn btn-default">Zoeken</button>
</form>
//This is displaying the correct value
<div>
<p>Form: {{ form.value | json }}</p>
<p>Form status: {{ form.control.status }}</p>
</div>
Компонент:
export class BijComponent implements AfterViewInit, OnInit {
@ViewChild('form') form: FormGroup;
constructor(private bijService: BijService, private sessionService: SessionService) { }
ngOnInit() {
// Do stuff
}
ngAfterViewInit() {
let v = JSON.stringify(this.form.value);// is `{ }`???
}
search(){
//Search function
}
}
Ответ №1:
Это из-за javascript
, позвольте мне немного объяснить:
Когда вы создаете свою форму, она создает внутренний объект для хранения значения формы, используя каждое поле для задания данных.
Но если переменная никогда не затрагивается, ее значение не null
равно, но undefined
, что означает, что переменная не существует.
Вот почему вы {}
не получаете {"name1":null, "name2": null}
.
Комментарии:
1. Тогда почему он не существует в
ngAfterViewInit
, но существует ли он вsearch
функции?2. что вы подразумеваете под «существовать в функции поиска»? вы пробовали
console.log(this.form.value)
внутриsearch()
?3. Да, у меня есть. Это дает
{"name1":null, "name2": null}
. Но мне нужно это значение вngAfterViewInit
или каком-либо другом методе onCreate4. Вы пробовали с
OnInit
помощью hook? Я не понимаю, откуда берется проблема. Но есть решение, которое заключается в привязке данных ваших полей к компоненту (скажите мне, хотите ли вы, чтобы я обновил ответ, чтобы показать пример)5. тот же результат в
ngOnInit
. Мне не нужен пример. Сейчас я уже использую решение для привязки.