The idiomatic way to disable an input field in HTML is using the disabled attribute:
An example would be:
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname" disabled="disabled"><br>
<input type="submit" value="Submit">
PreventDefault has nothing to do with disabling an input as far as I understand. MaxLength would in theory work, but it is hacky and not as apparent what the goal of the code is.
Disabled can be bound to however you like, just like any other attribute in Angular. So you could do something like
shouldDisable() is a method on the component that returns a truthy or falsy value.
Also, ion-input may have some special behavior, but I'm not aware of it. You can read further here: https://forum.ionicframework.com/t/how-to-disable-ion-input/42522