#html #angular
Вопрос:
Я вставляю компонент textarea в свой шаблон следующим образом:
<div class="card-body" *ngIf="isEditing">
<app-text-area input-id="body" input-value="This is my default input value"></app-text-area>
</div>
Шаблон app-text-area
выглядит так:
<textarea
placeholder="This is my placeholder"
[name]="inputID"
(input)="onInputChanged($event)"
ngModel>
{{ inputValue }}
</textarea>
Последующий визуализированный HTML выглядит так:
<textarea _ngcontent-owj-c62="" placeholder="This is my placeholder" ngmodel="" ng-reflect-model="" ng-reflect-name="body" class="ng-pristine ng-valid ng-touched">
This is my default input value
</textarea>
Однако на реальной странице inputValue
текст нигде не отображается, область текста действует так, как будто она пуста, даже показывая текст-заполнитель. Я вижу значение в html, хотя, когда я начинаю вводить текст в поле, оно заменяет его, как будто его там не было. Консоль не показывает ошибок.
Если я удалю ngModel
из текстовой области, это исправит ее
Мой app-text-area
компонент ts-это:
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { ControlContainer, NgForm } from '@angular/forms';
@Component({
selector: 'app-text-area',
templateUrl: './text-area.component.html',
viewProviders: [ { provide: ControlContainer, useExisting: NgForm } ],
styleUrls: ['./text-area.component.scss']
})
export class TextAreaComponent implements OnInit {
@Input("input-id") public inputID: string = "text";
@Input("input-value") public inputValue: string;
constructor() { }
ngOnInit(): void {
}
public onInputChanged(event: Event):void {
let newValue = (event.target as HTMLTextAreaElement).value;
this.inputValue = newValue;
}
}
Ответ №1:
Трудно помочь, не видя файл component.ts, но решением было бы что-то вроде следующего:
HTML шаблон:
<textarea
[name]="inputID"
(input)="onInputChanged($event)"
[value]="inputValue">
</textarea>
<p>{{inputValue}}</p>
И компонент.ts:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-text-area',
templateUrl: './text-area.component.html',
styleUrls: ['./text-area.component.css']
})
export class TextAreaComponent implements OnInit {
inputID:number=1;
inputValue:string="This is my placeholder";
constructor() { }
ngOnInit(): void {
}
onInputChanged(event:any){
this.inputValue=event.target.value;
}
}
Это установило бы начальное значение как «Это мой заполнитель» и обновляло бы значение при каждом изменении входных данных, отображаемых внутри тега p
Комментарии:
1. Мне нужно
inputValue
, чтобы он был внутриtextarea
, чтобы пользователи могли его редактировать. Если я это сделаю, он не появится. Я также добавил свой файл компонента к вопросу.2. Я не уверен, что понимаю, что вы хотите сделать, так как входное значение будет точно таким, какое вводит пользователь, или начальное значение, заданное как «заполнитель», которое можно редактировать, но будет заменено для любых пользовательских вводов.
Ответ №2:
Мне удалось исправить это, установив [ngModel]="inputValue"
вместо defaultValue
, value
, или поместив inputValue
внутри самой текстовой области.