Skip to content

Commit 5844a83

Browse files
brandyscarneyadamdbradley
authored andcommitted
fix(input): pass disabled down to input when it is set from form
- test modified to disable username and comments on `input/form-inputs` and then toggle them via a button see: http://g.recordit.co/RkN510TcHk.gif fixes ionic-team#9834
1 parent 21667c6 commit 5844a83

File tree

3 files changed

+37
-17
lines changed

3 files changed

+37
-17
lines changed

src/components/input/input.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ import { Platform } from '../../platform/platform';
8080
@Component({
8181
selector: 'ion-input,ion-textarea',
8282
template:
83-
'<input [(ngModel)]="_value" [type]="type" (blur)="inputBlurred($event)" (focus)="inputFocused($event)" [placeholder]="placeholder" class="text-input" [ngClass]="\'text-input-\' + _mode" *ngIf="_type!==\'textarea\'" #input>' +
84-
'<textarea [(ngModel)]="_value" (blur)="inputBlurred($event)" (focus)="inputFocused($event)" [placeholder]="placeholder" class="text-input" [ngClass]="\'text-input-\' + _mode" *ngIf="_type===\'textarea\'" #textarea></textarea>' +
83+
'<input [(ngModel)]="_value" [type]="type" (blur)="inputBlurred($event)" (focus)="inputFocused($event)" [placeholder]="placeholder" [disabled]="disabled" class="text-input" [ngClass]="\'text-input-\' + _mode" *ngIf="_type!==\'textarea\'" #input>' +
84+
'<textarea [(ngModel)]="_value" (blur)="inputBlurred($event)" (focus)="inputFocused($event)" [placeholder]="placeholder" [disabled]="disabled" class="text-input" [ngClass]="\'text-input-\' + _mode" *ngIf="_type===\'textarea\'" #textarea></textarea>' +
8585
'<input [type]="type" aria-hidden="true" next-input *ngIf="_useAssist">' +
8686
'<button ion-button clear [hidden]="!clearInput" type="button" class="text-input-clear-icon" (click)="clearTextInput()" (mousedown)="clearTextInput()"></button>' +
8787
'<div (touchstart)="pointerStart($event)" (touchend)="pointerEnd($event)" (mousedown)="pointerStart($event)" (mouseup)="pointerEnd($event)" class="input-cover" tappable *ngIf="_useAssist"></div>',
@@ -120,7 +120,7 @@ export class TextInput extends Ion implements IonicFormInput {
120120
@Optional() private _content: Content,
121121
@Optional() private _item: Item,
122122
@Optional() nav: NavController,
123-
@Optional() ngControl: NgControl,
123+
@Optional() public ngControl: NgControl,
124124
private _dom: DomController
125125
) {
126126
super(config, elementRef, renderer, 'input');
@@ -212,7 +212,7 @@ export class TextInput extends Ion implements IonicFormInput {
212212
*/
213213
@Input()
214214
get disabled() {
215-
return this._disabled;
215+
return this.ngControl ? this.ngControl.disabled : this._disabled;
216216
}
217217
set disabled(val: boolean) {
218218
this.setDisabled(this._disabled = isTrueProperty(val));
@@ -293,6 +293,7 @@ export class TextInput extends Ion implements IonicFormInput {
293293
setNativeInput(nativeInput: NativeInput) {
294294
this._native = nativeInput;
295295
nativeInput.setValue(this._value);
296+
nativeInput.isDisabled(this.disabled);
296297

297298
if (this._item && this._item.labelId !== null) {
298299
nativeInput.labelledBy(this._item.labelId);

src/components/input/test/form-inputs/app-module.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ export class E2EPage {
1818
comments: ''
1919
};
2020

21-
user = {
22-
username: 'asdf',
23-
password: '82'
24-
};
25-
2621
submitted: boolean = false;
2722
isTextAreaDisabled: boolean;
2823

@@ -39,8 +34,10 @@ export class E2EPage {
3934
});
4035

4136
this.userForm = fb.group({
42-
username: ['', Validators.required],
43-
password: ['', Validators.required],
37+
email: ['', Validators.required],
38+
username: [{value: 'administrator', disabled: true}, Validators.required],
39+
password: [{value: 'password', disabled: false}, Validators.required],
40+
comments: [{value: 'Comments are disabled', disabled: true}, Validators.required]
4441
});
4542
}
4643

@@ -52,7 +49,7 @@ export class E2EPage {
5249
}
5350
}
5451

55-
submit(ev: UIEvent, value: any) {
52+
submit(ev: UIEvent, value?: any) {
5653
console.log('Submitted', value);
5754
this.submitted = true;
5855
}
@@ -61,6 +58,14 @@ export class E2EPage {
6158
this.isTextAreaDisabled = !this.isTextAreaDisabled;
6259
}
6360

61+
toggleDisable() {
62+
let userNameCtrl = this.userForm.get('username');
63+
userNameCtrl.enabled ? userNameCtrl.disable() : userNameCtrl.enable();
64+
65+
let commentsCtrl = this.userForm.get('comments');
66+
commentsCtrl.enabled ? commentsCtrl.disable() : commentsCtrl.enable();
67+
}
68+
6469
}
6570

6671
@Component({

src/components/input/test/form-inputs/main.html

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,24 +54,38 @@
5454
</ion-list>
5555
</form>
5656

57-
<form [formGroup]="userForm" (ngSubmit)="submit($event, user)" #lf="ngForm">
57+
<form [formGroup]="userForm" (ngSubmit)="submit($event, userForm)" #lf="ngForm">
5858
<ion-list>
59+
<ion-list-header>
60+
Form w/ disabled inputs
61+
</ion-list-header>
62+
<ion-item>
63+
<ion-label floating>Email</ion-label>
64+
<ion-input type="email" formControlName="email"></ion-input>
65+
</ion-item>
5966
<ion-item>
6067
<ion-label floating>Username</ion-label>
61-
<ion-input [(ngModel)]="user.username" formControlName="username" required></ion-input>
68+
<ion-input formControlName="username"></ion-input>
6269
</ion-item>
6370
<ion-item>
6471
<ion-label floating>Password</ion-label>
65-
<ion-input type="password" [(ngModel)]="user.password" formControlName="password" required></ion-input>
72+
<ion-input type="password" formControlName="password"></ion-input>
73+
</ion-item>
74+
<ion-item>
75+
<ion-label floating>Comments</ion-label>
76+
<ion-textarea formControlName="comments"></ion-textarea>
6677
</ion-item>
6778
<div padding-left padding-right>
6879
<button ion-button block type="submit">Login</button>
80+
<button ion-button block type="button" color="secondary" (click)="toggleDisable()">Disable (toggle)</button>
6981
</div>
7082
<div padding-left>
7183
<b>Valid form?:</b> {{ lf.form.valid }}<br>
7284
<b>Submitted form?:</b> {{ submitted }}<br>
73-
<b>Username:</b> {{ user.username }}<br>
74-
<b>Password:</b> {{ user.password }}<br>
85+
<b>Email:</b> {{ userForm.controls.email.value }}<br>
86+
<b>Username:</b> {{ userForm.controls.username.value }}<br>
87+
<b>Password:</b> {{ userForm.controls.password.value }}<br>
88+
<b>Comments:</b> {{ userForm.controls.comments.value }}<br>
7589
</div>
7690
</ion-list>
7791
</form>

0 commit comments

Comments
 (0)