#angular
#angular
Вопрос:
Я хочу отредактировать текущие данные пользователя, поэтому сначала я пытаюсь записать в консоль отредактированные данные формы, но я получил ошибку
сначала я получил зарегистрированные данные пользователя в форме
<div *ngIf="auth.user | async; then nAuthenticated else guest">
</div>
<ng-template #nAuthenticated>
<div class="container emp-profile">
<div *ngIf="auth.user | async as user">
<form #f="ngForm" (ngSubmit)="nannySubmit(f)">
<div class="col-md-6">
<label>Name</label>
</div>
<div class="col-md-6">
<mat-form-field>
<input type="text" ngModel name="name"
#nameInput="ngModel" matInput placeholder= {{user.name}}>
</mat-form-field>
</div>
<button type="submit" mat-raised-button color="primary"
[disabled] ="f.invalid">Save Data</button>
</form>
</div>
</div>
</ng-template>
после того, как я попытаюсь получить доступ к значению поля ввода, используя приведенный ниже код
export class EditProfilesComponent implements OnInit {
nanny: Nanny;
constructor(public auth: PauthService) { }
ngOnInit() {
}
nannySubmit(form: NgForm) {
if (form.value.name != null) {
this.nanny.name = form.value.name;
}
console.log(this.nanny.name);
}
}
но после нажатия кнопки отправки я получил ошибку ниже в консоли
»’
EditProfilesComponent.html:41 ERROR TypeError: Cannot set property 'name' of undefined
at EditProfilesComponent.push../src/app/interface/edit-profiles/edit-profiles.component.ts.EditProfilesComponent.nannySubmit (edit-profiles.component.ts:31)
at Object.eval [as handleEvent] (EditProfilesComponent.html:41)
at handleEvent (core.js:23008)
at callWithDebugContext (core.js:24078)
at Object.debugHandleEvent [as handleEvent] (core.js:23805)
at dispatchEvent (core.js:20457)
at core.js:21947
at SafeSubscriber.schedulerFn [as _next] (core.js:13516)
at SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub (Subscriber.js:196)
at SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next (Subscriber.js:134)
'''
и, пожалуйста, скажите мне, в чем проблема, которую я создал??
Комментарии:
1. Вы указали
placeholder= {{user.name}}
, что это значит?? Я нигде не вижу,user
было объявлено значение.. Если вы удалитеplaceholder= {{user.name}}
, то это сработает..2. Да, либо удалите заполнитель и посмотрите, что он говорит, либо удалите тег <mat-form-field>, поскольку это может помешать ему.
3. эти методы не работают
Ответ №1:
Вам нужно добавить formControlName="name"
в свой входной тег также проверить, объявлено ли имя в
this.ngForm= this.formBuilder.group({
name: ['', Validators.required]
})
<input type="text" formControlName="name" ngModel name="name" />
Комментарии:
1. Нет, он делает управляемую форму на основе шаблона, а не реактивную управляемую форму.
2. Почему вы добавляете
ngModel
внутри реактивной формы??
Ответ №2:
Неправильный синтаксис ngModel, поэтому не удается прочитать значение из ng model и определить поле в файле .ts попробуйте это
<ng-template #nAuthenticated>
<div class="container emp-profile">
<div *ngIf="auth.user | async as user">
<form #f="ngForm" (ngSubmit)="nannySubmit()">
<div class="col-md-6">
<label>Name</label>
</div>
<div class="col-md-6">
<mat-form-field>
<input type="text" [(ngModel)]="name"
#nameInput="ngModel" matInput placeholder= {{user.name}}>
</mat-form-field>
</div>
<button type="submit" mat-raised-button color="primary"
[disabled] ="f.invalid">Save Data</button>
</form>
</div>
</div>
</ng-template>
В Component.ts
export class EditProfilesComponent implements OnInit {
nanny:any
name:any
constructor(public auth: PauthService) { }
ngOnInit() {
}
nannySubmit() {
if (this.name != null) {
this.nanny.name = this.name;
}
console.log(this.nanny.name);
}
}
Комментарии:
1. Это только в том случае, если он выполняет 2-стороннюю привязку данных. То, что у него там есть, должно работать правильно для простой новой формы.
2. спасибо, но после того, как я получил другую ошибку «‘EditProfilesComponent.html:ОШИБКА 85 Ошибка: если ngModel используется в теге формы, либо должен быть установлен атрибут name, либо элемент управления form должен быть определен как «автономный» в ngModelOptions. Пример 1: <ввод [(ngModel)]=»person.FirstName» name=»first»> Пример 2: <ввод [(ngModel)]=»person.FirstName» [ngModelOptions]=»{standalone: true}»> «‘
3. Хорошо, введите тег ввода с [(ngModel)]=»name» имя =»anyName». Это решит проблему, если не пытаться передать [ngModelOptions]=»{standalone: true}» во входном теге