У меня в телефоне есть аутентификация телефона. Мы пытаемся автоматически заполнить otp, и пользователь также может заполнить его вручную.
Чтобы позволить пользователю вводить otp вручную, я разработал функцию keyup, как показано ниже. И для автоматического заполнения otp используется [(ngModel)]
для каждого поля ввода, чтобы отразить otp на html
Но каждый раз, когда пользователь пытается что-то напечатать, следующая ошибка показывает
TypeError: Cannot assign to read-only property '0' of string ''
Как решить ошибка?
Заранее спасибо
. html
<ion-row >
<ion-col>
<ion-input class="x" #otp1 required="true" maxLength="1" [(ngModel)] ="OTP[0]" (keyup)="otpController($event,otp2,'')">
</ion-input>
<ion-input class="x" #otp2 required="true" maxLength="1" [(ngModel)]="OTP[1]" (keyup)="otpController($event,otp3,otp1)">
</ion-input>
<ion-input class="x" #otp3 required="true" maxLength="1" [(ngModel)]="OTP[2]" (keyup)="otpController($event,otp4,otp2)">
</ion-input>
<ion-input class="x" #otp4 required="true" maxLength="1" [(ngModel)]="OTP[3]" (keyup)="otpController($event,otp5,otp3)">
</ion-input>
<ion-input class="x" #otp5 required="true" maxLength="1" [(ngModel)]="OTP[4]" (keyup)="otpController($event,otp6,otp4)">
</ion-input>
<ion-input class="x" #otp6 required="true" maxLength="1" [(ngModel)]="OTP[5]" (keyup)="otpController($event,'',otp5)">
</ion-input>
</ion-col>
</ion-row>
.ts
OTP: string = '';
otpController(event,next,prev, index){
if(index == 6) {
console.log("submit")
}
if(event.target.value.length < 1 && prev){
prev.setFocus()
}
else if(next && event.target.value.length>0){
next.setFocus();
}
else {
return 0;
}
}
. css
.x{
display:inline-block;
width:50px;
height:50px;
margin:10px;
border-radius: 50%;
--background:#e1e1e1;
--padding-start:7px;
}