mirror of https://github.com/ElemeFE/element
Radio: change event only triggers on user input
parent
bb58f00746
commit
22ab137963
|
@ -137,6 +137,12 @@ label | the value of radio | string/number/boolean | — | —
|
||||||
disabled | whether radio is disabled | boolean | — | false
|
disabled | whether radio is disabled | boolean | — | false
|
||||||
name | native 'name' attribute | string | — | —
|
name | native 'name' attribute | string | — | —
|
||||||
|
|
||||||
|
### Radio Events
|
||||||
|
|
||||||
|
| Event Name | Description | Parameters |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| change | triggers when the bound value changes | the label value of the chosen radio |
|
||||||
|
|
||||||
### Radio-group Attributes
|
### Radio-group Attributes
|
||||||
|
|
||||||
Attribute | Description | Type | Accepted Values | Default
|
Attribute | Description | Type | Accepted Values | Default
|
||||||
|
@ -148,8 +154,8 @@ text-color | font color when button is active | string | — | #ffffff |
|
||||||
### Radio-group Events
|
### Radio-group Events
|
||||||
|
|
||||||
| Event Name | Description | Parameters |
|
| Event Name | Description | Parameters |
|
||||||
--- | --- | ---
|
| --- | --- | --- |
|
||||||
change | triggers when the bound value changes | the label value of the chosen radio
|
| change | triggers when the bound value changes | the label value of the chosen radio |
|
||||||
|
|
||||||
### Radio-button Attributes
|
### Radio-button Attributes
|
||||||
|
|
||||||
|
|
|
@ -141,6 +141,11 @@
|
||||||
| disabled | 是否禁用 | boolean | — | false |
|
| disabled | 是否禁用 | boolean | — | false |
|
||||||
| name | 原生 name 属性 | string | — | — |
|
| name | 原生 name 属性 | string | — | — |
|
||||||
|
|
||||||
|
### Radio Events
|
||||||
|
| 事件名称 | 说明 | 回调参数 |
|
||||||
|
|---------- |-------- |---------- |
|
||||||
|
| change | 绑定值变化时触发的事件 | 选中的 Radio label 值 |
|
||||||
|
|
||||||
### Radio-group Attributes
|
### Radio-group Attributes
|
||||||
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
||||||
|---------- |-------- |---------- |------------- |-------- |
|
|---------- |-------- |---------- |------------- |-------- |
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
type="radio"
|
type="radio"
|
||||||
v-model="value"
|
v-model="value"
|
||||||
:name="name"
|
:name="name"
|
||||||
|
@change="handleChange"
|
||||||
:disabled="isDisabled"
|
:disabled="isDisabled"
|
||||||
tabindex="-1"
|
tabindex="-1"
|
||||||
>
|
>
|
||||||
|
@ -28,9 +29,13 @@
|
||||||
</label>
|
</label>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
import Emitter from 'element-ui/src/mixins/emitter';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ElRadioButton',
|
name: 'ElRadioButton',
|
||||||
|
|
||||||
|
mixins: [Emitter],
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
label: {},
|
label: {},
|
||||||
disabled: Boolean,
|
disabled: Boolean,
|
||||||
|
@ -73,6 +78,14 @@
|
||||||
tabIndex() {
|
tabIndex() {
|
||||||
return !this.isDisabled ? (this._radioGroup ? (this.value === this.label ? 0 : -1) : 0) : -1;
|
return !this.isDisabled ? (this._radioGroup ? (this.value === this.label ? 0 : -1) : 0) : -1;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
handleChange() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.dispatch('ElRadioGroup', 'handleChange', this.value);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -30,6 +30,11 @@
|
||||||
textColor: String,
|
textColor: String,
|
||||||
disabled: Boolean
|
disabled: Boolean
|
||||||
},
|
},
|
||||||
|
created() {
|
||||||
|
this.$on('handleChange', value => {
|
||||||
|
this.$emit('change', value);
|
||||||
|
});
|
||||||
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
// 当radioGroup没有默认选项时,第一个可以选中Tab导航
|
// 当radioGroup没有默认选项时,第一个可以选中Tab导航
|
||||||
let radios = this.$el.querySelectorAll('[type=radio]');
|
let radios = this.$el.querySelectorAll('[type=radio]');
|
||||||
|
@ -73,7 +78,6 @@
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
value(value) {
|
value(value) {
|
||||||
this.$emit('change', value);
|
|
||||||
this.dispatch('ElFormItem', 'el.form.change', [this.value]);
|
this.dispatch('ElFormItem', 'el.form.change', [this.value]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
v-model="model"
|
v-model="model"
|
||||||
@focus="focus = true"
|
@focus="focus = true"
|
||||||
@blur="focus = false"
|
@blur="focus = false"
|
||||||
|
@change="handleChange"
|
||||||
:name="name"
|
:name="name"
|
||||||
:disabled="isDisabled"
|
:disabled="isDisabled"
|
||||||
tabindex="-1"
|
tabindex="-1"
|
||||||
|
@ -89,6 +90,15 @@
|
||||||
tabIndex() {
|
tabIndex() {
|
||||||
return !this.isDisabled ? (this.isGroup ? (this.model === this.label ? 0 : -1) : 0) : -1;
|
return !this.isDisabled ? (this.isGroup ? (this.model === this.label ? 0 : -1) : 0) : -1;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
handleChange() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$emit('change', this.model);
|
||||||
|
this.isGroup && this.dispatch('ElRadioGroup', 'handleChange', this.model);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -50,6 +50,63 @@ describe('Radio', () => {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
it('change event', done => {
|
||||||
|
vm = createVue({
|
||||||
|
template: `
|
||||||
|
<el-radio
|
||||||
|
v-model="radio"
|
||||||
|
label="3"
|
||||||
|
@change="handleChange"
|
||||||
|
>
|
||||||
|
</el-radio>
|
||||||
|
`,
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
radio: '',
|
||||||
|
data: ''
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleChange(val) {
|
||||||
|
this.data = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
let radioElm = vm.$el;
|
||||||
|
radioElm.click();
|
||||||
|
setTimeout(_ => {
|
||||||
|
expect(vm.data).to.equal('3');
|
||||||
|
done();
|
||||||
|
}, 10);
|
||||||
|
});
|
||||||
|
it('change event only triggers on user input', done => {
|
||||||
|
vm = createVue({
|
||||||
|
template: `
|
||||||
|
<el-radio
|
||||||
|
v-model="radio"
|
||||||
|
label="3"
|
||||||
|
@change="handleChange"
|
||||||
|
>
|
||||||
|
</el-radio>
|
||||||
|
`,
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
radio: '',
|
||||||
|
data: ''
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleChange(val) {
|
||||||
|
this.data = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
vm.radio = '3';
|
||||||
|
setTimeout(_ => {
|
||||||
|
expect(vm.data).to.equal('');
|
||||||
|
done();
|
||||||
|
}, 10);
|
||||||
|
});
|
||||||
describe('Radio group', () => {
|
describe('Radio group', () => {
|
||||||
it('create', done => {
|
it('create', done => {
|
||||||
vm = createVue({
|
vm = createVue({
|
||||||
|
@ -102,6 +159,61 @@ describe('Radio', () => {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
it('change event', done => {
|
||||||
|
vm = createVue({
|
||||||
|
template: `
|
||||||
|
<el-radio-group v-model="radio" @change="onChange">
|
||||||
|
<el-radio :label="3">备选项</el-radio>
|
||||||
|
<el-radio :label="6" ref="radio2">备选项</el-radio>
|
||||||
|
<el-radio :label="9">备选项</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
`,
|
||||||
|
methods: {
|
||||||
|
onChange(val) {
|
||||||
|
this.data = val;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
radio: 3,
|
||||||
|
data: 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
let radio2 = vm.$refs.radio2;
|
||||||
|
radio2.$el.click();
|
||||||
|
setTimeout(_ => {
|
||||||
|
expect(vm.data).to.equal(6);
|
||||||
|
done();
|
||||||
|
}, 10);
|
||||||
|
});
|
||||||
|
it('change event only triggers on user input', done => {
|
||||||
|
vm = createVue({
|
||||||
|
template: `
|
||||||
|
<el-radio-group v-model="radio" @change="onChange">
|
||||||
|
<el-radio :label="3">备选项</el-radio>
|
||||||
|
<el-radio :label="6">备选项</el-radio>
|
||||||
|
<el-radio :label="9">备选项</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
`,
|
||||||
|
methods: {
|
||||||
|
onChange(val) {
|
||||||
|
this.data = val;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
radio: 3,
|
||||||
|
data: 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
vm.radio = 6;
|
||||||
|
setTimeout(_ => {
|
||||||
|
expect(vm.data).to.equal(0);
|
||||||
|
done();
|
||||||
|
}, 10);
|
||||||
|
});
|
||||||
it('disabled when children is radio button', done => {
|
it('disabled when children is radio button', done => {
|
||||||
vm = createVue({
|
vm = createVue({
|
||||||
template: `
|
template: `
|
||||||
|
@ -174,6 +286,61 @@ describe('Radio', () => {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
it('change event', done => {
|
||||||
|
vm = createVue({
|
||||||
|
template: `
|
||||||
|
<el-radio-group v-model="radio" @change="onChange">
|
||||||
|
<el-radio-button :label="3">备选项</el-radio-button>
|
||||||
|
<el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
|
||||||
|
<el-radio-button :label="9">备选项</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
|
`,
|
||||||
|
methods: {
|
||||||
|
onChange(val) {
|
||||||
|
this.data = val;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
data: 0,
|
||||||
|
radio: 3
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
let radio = vm.$refs.radio2;
|
||||||
|
radio.$el.click();
|
||||||
|
setTimeout(_ => {
|
||||||
|
expect(vm.data).to.equal(6);
|
||||||
|
done();
|
||||||
|
}, 10);
|
||||||
|
});
|
||||||
|
it('change event only triggers on user input', done => {
|
||||||
|
vm = createVue({
|
||||||
|
template: `
|
||||||
|
<el-radio-group v-model="radio" @change="onChange">
|
||||||
|
<el-radio-button :label="3">备选项</el-radio-button>
|
||||||
|
<el-radio-button :label="6" ref="radio2">备选项</el-radio-button>
|
||||||
|
<el-radio-button :label="9">备选项</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
|
`,
|
||||||
|
methods: {
|
||||||
|
onChange(val) {
|
||||||
|
this.data = val;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
data: 0,
|
||||||
|
radio: 3
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
vm.radio = 6;
|
||||||
|
setTimeout(_ => {
|
||||||
|
expect(vm.data).to.equal(0);
|
||||||
|
done();
|
||||||
|
}, 10);
|
||||||
|
});
|
||||||
it('size', done => {
|
it('size', done => {
|
||||||
vm = createVue({
|
vm = createVue({
|
||||||
template: `
|
template: `
|
||||||
|
|
Loading…
Reference in New Issue