Skip to content

Commit f9dd34f

Browse files
karatinayuangao
authored andcommitted
fix(input): disable underline with reactive forms (#2565)
Closes #2558
1 parent ac363df commit f9dd34f

File tree

4 files changed

+44
-8
lines changed

4 files changed

+44
-8
lines changed

src/demo-app/input/input-container-demo.html

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,15 @@ <h4>Textarea</h4>
253253
<md-toolbar color="primary">Forms</md-toolbar>
254254
<md-card-content>
255255
<md-input-container><input mdInput placeholder="reactive" [formControl]="formControl"></md-input-container>
256-
<md-input-container><input mdInput placeholder="template" [(ngModel)]="model" required></md-input-container>
256+
<md-input-container>
257+
<input mdInput placeholder="template" [(ngModel)]="model" required [disabled]="ctrlDisabled">
258+
</md-input-container>
259+
<button md-raised-button color="primary" (click)="formControl.enabled ? formControl.disable() : formControl.enable()">
260+
DISABLE REACTIVE CTRL
261+
</button>
262+
<button md-raised-button color="primary" (click)="ctrlDisabled = !ctrlDisabled">
263+
DISABLE TD CTRL
264+
</button>
257265
</md-card-content>
258266
</md-card>
259267

src/demo-app/input/input-container-demo.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export class InputContainerDemo {
1414
dividerColor: boolean;
1515
requiredField: boolean;
1616
floatingLabel: boolean;
17+
ctrlDisabled = false;
18+
1719
name: string;
1820
items: any[] = [
1921
{ value: 10 },

src/lib/input/input-container.spec.ts

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -332,22 +332,43 @@ describe('MdInputContainer', function () {
332332
});
333333

334334
it('supports the disabled attribute as binding', async(() => {
335-
let fixture = TestBed.createComponent(MdInputContainerWithDisabled);
335+
const fixture = TestBed.createComponent(MdInputContainerWithDisabled);
336336
fixture.detectChanges();
337337

338-
let underlineEl = fixture.debugElement.query(By.css('.md-input-underline')).nativeElement;
339-
let inputEl = fixture.debugElement.query(By.css('input')).nativeElement;
338+
const underlineEl = fixture.debugElement.query(By.css('.md-input-underline')).nativeElement;
339+
const inputEl = fixture.debugElement.query(By.css('input')).nativeElement;
340340

341-
expect(underlineEl.classList.contains('md-disabled')).toBe(false, 'should not be disabled');
341+
expect(underlineEl.classList.contains('md-disabled'))
342+
.toBe(false, `Expected underline not to start out disabled.`);
342343
expect(inputEl.disabled).toBe(false);
343344

344345
fixture.componentInstance.disabled = true;
345346
fixture.detectChanges();
346347

348+
expect(underlineEl.classList.contains('md-disabled'))
349+
.toBe(true, `Expected underline to look disabled after property is set.`);
347350
expect(inputEl.disabled).toBe(true);
348-
expect(underlineEl.classList.contains('md-disabled')).toBe(true, 'should be disabled');
349351
}));
350352

353+
it('should display disabled styles when using FormControl.disable()', () => {
354+
const fixture = TestBed.createComponent(MdInputContainerWithFormControl);
355+
fixture.detectChanges();
356+
357+
const underlineEl = fixture.debugElement.query(By.css('.md-input-underline')).nativeElement;
358+
const inputEl = fixture.debugElement.query(By.css('input')).nativeElement;
359+
360+
expect(underlineEl.classList)
361+
.not.toContain('md-disabled', `Expected underline not to start out disabled.`);
362+
expect(inputEl.disabled).toBe(false);
363+
364+
fixture.componentInstance.formControl.disable();
365+
fixture.detectChanges();
366+
367+
expect(underlineEl.classList)
368+
.toContain('md-disabled', `Expected underline to look disabled after disable() is called.`);
369+
expect(inputEl.disabled).toBe(true);
370+
});
371+
351372
it('supports the required attribute as binding', async(() => {
352373
let fixture = TestBed.createComponent(MdInputContainerWithRequired);
353374
fixture.detectChanges();

src/lib/input/input-container.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,13 @@ export class MdInputDirective {
101101

102102
/** Whether the element is disabled. */
103103
@Input()
104-
get disabled() { return this._disabled; }
105-
set disabled(value: any) { this._disabled = coerceBooleanProperty(value); }
104+
get disabled() {
105+
return this._ngControl ? this._ngControl.disabled : this._disabled;
106+
}
107+
108+
set disabled(value: any) {
109+
this._disabled = coerceBooleanProperty(value);
110+
}
106111

107112
/** Unique id of the element. */
108113
@Input()

0 commit comments

Comments
 (0)