Я не совсем уверен в том, что
... и сделал иконку абсолютной, чтобы она появлялась сверху поля ввода вместо стороны
будет означать, но, тем не менее, использование position: absolute
поверх входов может привести к ошибкам, особенно в iOS.
Другая возможная проблема вашего кода заключается в том, что кнопки предназначены для решения проблем, связанных с нажатиями на мобильных устройствах, но значки иногда могут работать неправильно.
В любом случае, пожалуйста, посмотритев этот рабочий проект Stackblitz сделать что-то вроде этого:
Код довольно прост на самом деле- идея состоит в том, чтобы использовать кнопку со значком вместо просто значка, чтобы избежать проблем с событием касания:
Компонент
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
public showPassword: boolean = false;
constructor(public navCtrl: NavController) {}
public onPasswordToggle(): void {
this.showPassword = !this.showPassword;
}
}
Шаблон
<ion-header>
<!-- ... -->
</ion-header>
<ion-content padding>
<!-- ... -->
<ion-item>
<ion-input placeholder="Password" [type]="showPassword ? 'text' : 'password'" clearOnEdit="false"></ion-input>
<button (click)="onPasswordToggle()" ion-button clear small item-end icon-only>
<ion-icon [name]="showPassword ? 'eye-off' : 'eye'"></ion-icon>
</button>
</ion-item>
</ion-content>
РЕДАКТИРОВАТЬ
Исходя из ваших комментариев, одним из способов удерживать кнопку внутри границы было бы не применять границук input
, но к ion-item
.
Примерно так, например:
ion-item {
border: 1px solid #ccc;
border-radius: 10px;
}
приведет к: