Ionic 除非在afterViewInit中设置,否则不显示离子输入值

5n0oy7gb  于 2022-12-08  发布在  Ionic
关注(0)|答案(1)|浏览(151)

我有一个账户管理页面。在这个页面上有一个输入用户的电子邮件地址。在TypeScript文件中,我尝试根据当前用户设置电子邮件的值。当我在构造函数中设置值时,在ngOnInit()中,或者在ngAfterContentInit()中,该值不会显示在输入中。如果你在dev工具中查看,它会在ng-reflect-value属性中显示该值。但是不会显示在输入中。另外两个值(emailVerifiedverificationText)都按照我期望的方式工作,只是输入的值没有按照我期望的方式工作。
HTML程式码片段

<ion-item class="ion-margin-vertical" fill="solid">
    <ion-label position="floating">Email</ion-label>
    <ion-input [value]="userEmail" name="userEmail" type="email" ngModel email></ion-input>
    <ion-button slot="end" [color]="emailVerified" class="ion-padding-start ion-no-margin" (click)="verifyEmail()">
        <ion-icon name="shield-checkmark-outline" slot="start"></ion-icon>
        {{ verificationText }}
    </ion-button>
</ion-item>

TypeScript程式码片段

export class AccountSettingsComponent implements OnInit {
    emailVerified: 'success' | 'warning' | 'danger' = 'warning';
    verificationText: string = 'Verify';
    userEmail: string | null = '';
    user: User;

    constructor(authService: AuthService) {
        this.user = authService.getUserData()
        this.userEmail = this.user.email
        this.emailVerified = this.user.emailVerified ? 'success' : 'warning'
        this.verificationText = this.user.emailVerified ? 'Verified' : 'Verify'
    }

    ...
}

当我在ngAfterViewInit()中设置值时,它显示输入中的值,但我得到一个错误,说某些值在检查后被更改。

mrzz3bfm

mrzz3bfm1#

当我创建这个问题时,我遇到了另一个question,它没有直接回答这个问题,但它确实包含了一个解决方案。
输入中使用的单向绑定位置错误。因为您使用的是ngModel,所以我们需要在该属性上添加单向绑定(双向绑定也可以,但只有在需要时才使用)。如下所示:

<ion-item class="ion-margin-vertical" fill="solid">
    <ion-label position="floating">Email</ion-label>
    <ion-input name="userEmail" type="email" [ngModel]="userEmail" email></ion-input>
    <ion-button slot="end" [color]="emailVerified" class="ion-padding-start ion-no-margin" (click)="verifyEmail()">
        <ion-icon name="shield-checkmark-outline" slot="start"></ion-icon>
        {{ verificationText }}
    </ion-button>
</ion-item>

这将使用ngModel属性(而不是value属性)设置输入的起始值。

相关问题