diff --git a/src/components/checkbox/checkbox.ts b/src/components/checkbox/checkbox.ts
index 6d2f22ea55..c44ef685bf 100644
--- a/src/components/checkbox/checkbox.ts
+++ b/src/components/checkbox/checkbox.ts
@@ -231,6 +231,13 @@ export class Checkbox extends Ion implements IonicTapInput, AfterContentInit, Co
this._init = true;
}
+ /**
+ * @private
+ */
+ setDisabledState(isDisabled: boolean) {
+ this.disabled = isDisabled;
+ }
+
/**
* @private
*/
diff --git a/src/components/checkbox/test/basic/app-module.ts b/src/components/checkbox/test/basic/app-module.ts
index 6db2907631..bcd214b028 100644
--- a/src/components/checkbox/test/basic/app-module.ts
+++ b/src/components/checkbox/test/basic/app-module.ts
@@ -17,8 +17,8 @@ export class E2EPage {
appleCtrl = new FormControl(true);
bananaCtrl = new FormControl(true);
- cherryCtrl = new FormControl(false);
- grapeCtrl = new FormControl(true);
+ cherryCtrl = new FormControl({value: false, disabled: true});
+ grapeCtrl = new FormControl({value: true, disabled: true});
fruitsForm = new FormGroup({
'apple': this.appleCtrl,
@@ -28,7 +28,6 @@ export class E2EPage {
});
constructor() {
- this.grapeDisabled = true;
this.grapeChecked = true;
this.standAloneChecked = true;
}
@@ -38,7 +37,7 @@ export class E2EPage {
}
toggleGrapeDisabled() {
- this.grapeDisabled = !this.grapeDisabled;
+ this.fruitsForm.get('grape').enabled ? this.fruitsForm.get('grape').disable() : this.fruitsForm.get('grape').enable();
}
kiwiChange(checkbox: Checkbox) {
diff --git a/src/components/checkbox/test/basic/main.html b/src/components/checkbox/test/basic/main.html
index 5f403370ff..5373529bd2 100644
--- a/src/components/checkbox/test/basic/main.html
+++ b/src/components/checkbox/test/basic/main.html
@@ -25,12 +25,12 @@
Cherry, formControlName, disabled
-
+
Grape, formControlName, checked, disabled
-
+
diff --git a/src/components/datetime/datetime.ts b/src/components/datetime/datetime.ts
index b73799542b..4cdb8dee73 100644
--- a/src/components/datetime/datetime.ts
+++ b/src/components/datetime/datetime.ts
@@ -860,6 +860,13 @@ export class DateTime extends Ion implements AfterContentInit, ControlValueAcces
*/
onTouched() { }
+ /**
+ * @private
+ */
+ setDisabledState(isDisabled: boolean) {
+ this.disabled = isDisabled;
+ }
+
/**
* @private
*/
diff --git a/src/components/datetime/test/form/app-module.ts b/src/components/datetime/test/form/app-module.ts
new file mode 100644
index 0000000000..a5a39c92e6
--- /dev/null
+++ b/src/components/datetime/test/form/app-module.ts
@@ -0,0 +1,46 @@
+import { Component, NgModule } from '@angular/core';
+import { FormControl, FormGroup } from '@angular/forms';
+import { IonicApp, IonicModule } from '../../../..';
+
+
+
+@Component({
+ templateUrl: 'main.html'
+})
+export class E2EPage {
+ stackedCtrl = new FormControl('1994-12-15T13:47:20.789');
+ floatingCtrl = new FormControl('1995-04-15');
+ fixedCtrl = new FormControl({value: '2002-09-23T15:03:46.789', disabled: true});
+ inlineCtrl = new FormControl({value: '2005-06-17T11:06Z', disabled: true});
+
+ datetimeForm = new FormGroup({
+ 'stacked': this.stackedCtrl,
+ 'floating': this.floatingCtrl,
+ 'fixed': this.fixedCtrl,
+ 'inline': this.inlineCtrl
+ });
+
+}
+
+
+@Component({
+ template: ''
+})
+export class E2EApp {
+ root = E2EPage;
+}
+
+@NgModule({
+ declarations: [
+ E2EApp,
+ E2EPage
+ ],
+ imports: [
+ IonicModule.forRoot(E2EApp)
+ ],
+ bootstrap: [IonicApp],
+ entryComponents: [
+ E2EPage
+ ]
+})
+export class AppModule {}
diff --git a/src/components/datetime/test/form/main.html b/src/components/datetime/test/form/main.html
new file mode 100644
index 0000000000..76450ae968
--- /dev/null
+++ b/src/components/datetime/test/form/main.html
@@ -0,0 +1,32 @@
+
+
+
+ Datetime
+
+
+
+
+
+
+
+
diff --git a/src/components/radio/radio-button.ts b/src/components/radio/radio-button.ts
index 959338790d..f954122f35 100644
--- a/src/components/radio/radio-button.ts
+++ b/src/components/radio/radio-button.ts
@@ -173,7 +173,7 @@ export class RadioButton extends Ion implements IonicTapInput, OnDestroy, OnInit
*/
@Input()
get disabled(): boolean {
- return this._disabled;
+ return this._disabled || (this._group != null && this._group.disabled);
}
set disabled(val: boolean) {
this._disabled = isTrueProperty(val);
@@ -207,6 +207,10 @@ export class RadioButton extends Ion implements IonicTapInput, OnDestroy, OnInit
if (this._group && isPresent(this._group.value)) {
this.checked = isCheckedProperty(this._group.value, this.value);
}
+
+ if (this._group && this._group.disabled) {
+ this.disabled = this._group.disabled;
+ }
}
/**
diff --git a/src/components/radio/radio-group.ts b/src/components/radio/radio-group.ts
index 1088076f11..253e48cb6c 100644
--- a/src/components/radio/radio-group.ts
+++ b/src/components/radio/radio-group.ts
@@ -1,8 +1,8 @@
-import { ChangeDetectorRef, ContentChild, Directive, ElementRef, EventEmitter, forwardRef, Output, Renderer } from '@angular/core';
+import { ChangeDetectorRef, ContentChild, Directive, ElementRef, EventEmitter, forwardRef, Input, Output, Renderer } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { ListHeader } from '../list/list-header';
-import { isCheckedProperty } from '../../util/util';
+import { isCheckedProperty, isTrueProperty } from '../../util/util';
import { RadioButton } from './radio-button';
export const RADIO_VALUE_ACCESSOR: any = {
@@ -71,6 +71,11 @@ export const RADIO_VALUE_ACCESSOR: any = {
})
export class RadioGroup {
+ /**
+ * @internal
+ */
+ _disabled: boolean = false;
+
/**
* @private
*/
@@ -101,6 +106,17 @@ export class RadioGroup {
*/
id: number;
+ /**
+ * @input {boolean} Whether all radio buttons in the group should be disabled. Default false.
+ */
+ @Input()
+ get disabled(): boolean {
+ return this._disabled;
+ }
+ set disabled(val: boolean) {
+ this._disabled = isTrueProperty(val);
+ }
+
/**
* @output {any} expression to be evaluated when selection has been changed
*/
@@ -248,6 +264,13 @@ export class RadioGroup {
*/
onTouched() {}
+ /**
+ * @private
+ */
+ setDisabledState(isDisabled: boolean) {
+ this.disabled = isDisabled;
+ }
+
}
let radioGroupIds = -1;
diff --git a/src/components/radio/test/basic/app-module.ts b/src/components/radio/test/basic/app-module.ts
index 24822d7a43..35fc3a17da 100644
--- a/src/components/radio/test/basic/app-module.ts
+++ b/src/components/radio/test/basic/app-module.ts
@@ -18,6 +18,11 @@ export class E2EPage {
'fruitsCtrl': this.fruitsCtrl
});
+ friendsCtrl = new FormControl({value: 'enemies', disabled: true});
+ friendsForm = new FormGroup({
+ 'friendsCtrl': this.friendsCtrl
+ });
+
currenciesControl = new FormControl('EUR');
currencyForm = new FormGroup({
'currenciesControl': this.currenciesControl
diff --git a/src/components/radio/test/basic/main.html b/src/components/radio/test/basic/main.html
index f52c56e5d3..9fd1245521 100644
--- a/src/components/radio/test/basic/main.html
+++ b/src/components/radio/test/basic/main.html
@@ -142,4 +142,30 @@
+
+ Disabled radio-group
+
+ Friends
+
+
+
+ Enemies
+
+
+
+
+
+
diff --git a/src/components/range/range.ts b/src/components/range/range.ts
index c9eae43c80..54e1984731 100644
--- a/src/components/range/range.ts
+++ b/src/components/range/range.ts
@@ -626,6 +626,13 @@ export class Range extends Ion implements AfterViewInit, ControlValueAccessor, O
*/
onTouched() { }
+ /**
+ * @private
+ */
+ setDisabledState(isDisabled: boolean) {
+ this.disabled = isDisabled;
+ }
+
/**
* @private
*/
diff --git a/src/components/range/test/basic/app-module.ts b/src/components/range/test/basic/app-module.ts
index 39c32e9e45..364794dbb4 100644
--- a/src/components/range/test/basic/app-module.ts
+++ b/src/components/range/test/basic/app-module.ts
@@ -1,4 +1,5 @@
import { Component, NgModule } from '@angular/core';
+import { FormControl, FormGroup } from '@angular/forms';
import { IonicApp, IonicModule, Range } from '../../../..';
@@ -13,6 +14,14 @@ export class Page1 {
dualValue: any;
dualValue2 = {lower: 33, upper: 60};
+ rangeCtrl = new FormControl({value: '66', disabled: true});
+ dualRangeCtrl = new FormControl({value: {lower: 33, upper: 60}, disabled: true});
+
+ rangeForm = new FormGroup({
+ 'range': this.rangeCtrl,
+ 'dualRange': this.dualRangeCtrl
+ });
+
rangeChange(range: Range) {
console.log(`range, change, ratio: ${range.ratio}, value: ${range.value}`);
}
diff --git a/src/components/range/test/basic/page1.html b/src/components/range/test/basic/page1.html
index 40de99d65a..96df50c141 100644
--- a/src/components/range/test/basic/page1.html
+++ b/src/components/range/test/basic/page1.html
@@ -101,7 +101,20 @@
dual, step=3, snaps, {{dualValue2 | json}}
-
+
+
diff --git a/src/components/select/select.ts b/src/components/select/select.ts
index 7a31dd09f4..e7e80c6317 100644
--- a/src/components/select/select.ts
+++ b/src/components/select/select.ts
@@ -487,6 +487,13 @@ export class Select extends Ion implements AfterContentInit, ControlValueAccesso
*/
onTouched() { }
+ /**
+ * @private
+ */
+ setDisabledState(isDisabled: boolean) {
+ this.disabled = isDisabled;
+ }
+
/**
* @private
*/
diff --git a/src/components/select/test/single-value/app-module.ts b/src/components/select/test/single-value/app-module.ts
index 6acd44d8a2..6855007443 100644
--- a/src/components/select/test/single-value/app-module.ts
+++ b/src/components/select/test/single-value/app-module.ts
@@ -1,4 +1,5 @@
import { Component, NgModule } from '@angular/core';
+import { FormControl, FormGroup } from '@angular/forms';
import { IonicApp, IonicModule } from '../../../..';
export interface Currency {
@@ -55,6 +56,11 @@ export class E2EPage {
];
currency: Currency;
+ fruitCtrl = new FormControl({value: 'grape', disabled: true});
+ fruitsForm = new FormGroup({
+ 'fruit': this.fruitCtrl
+ });
+
constructor() {
this.currency = this.currencies[0];
}
diff --git a/src/components/select/test/single-value/main.html b/src/components/select/test/single-value/main.html
index 54ff20ddfc..dcafc93d36 100644
--- a/src/components/select/test/single-value/main.html
+++ b/src/components/select/test/single-value/main.html
@@ -125,4 +125,16 @@
+
+
diff --git a/src/components/toggle/test/basic/app-module.ts b/src/components/toggle/test/basic/app-module.ts
index d9f511ac96..0251a00dd7 100644
--- a/src/components/toggle/test/basic/app-module.ts
+++ b/src/components/toggle/test/basic/app-module.ts
@@ -15,8 +15,8 @@ export class E2EPage {
appleCtrl = new FormControl(false);
bananaCtrl = new FormControl(true);
- cherryCtrl = new FormControl(false);
- grapeCtrl = new FormControl(true);
+ cherryCtrl = new FormControl({value: false, disabled: true});
+ grapeCtrl = new FormControl({value: true, disabled: true});
fruitsForm = new FormGroup({
'apple': this.appleCtrl,
@@ -35,7 +35,7 @@ export class E2EPage {
}
toggleGrapeDisabled() {
- this.grapeDisabled = !this.grapeDisabled;
+ this.grapeCtrl.enabled ? this.grapeCtrl.disable() : this.grapeCtrl.enable();
}
appleChange(toggle: Toggle) {
diff --git a/src/components/toggle/test/basic/main.html b/src/components/toggle/test/basic/main.html
index af69cced18..8da29221b6 100644
--- a/src/components/toggle/test/basic/main.html
+++ b/src/components/toggle/test/basic/main.html
@@ -35,12 +35,12 @@
Cherry, formControlName, disabled
-
+
Grape, formControlName, checked, disabled
-
+
@@ -53,6 +53,11 @@
+
+ disabled="true"
+
+
+
diff --git a/src/components/toggle/toggle.ts b/src/components/toggle/toggle.ts
index 9b4b716352..6d387c5218 100644
--- a/src/components/toggle/toggle.ts
+++ b/src/components/toggle/toggle.ts
@@ -304,6 +304,13 @@ export class Toggle extends Ion implements IonicTapInput, AfterContentInit, Cont
this._elementRef.nativeElement.querySelector('button').focus();
}
+ /**
+ * @private
+ */
+ setDisabledState(isDisabled: boolean) {
+ this.disabled = isDisabled;
+ }
+
/**
* @private
*/