Merge pull request #1573 from rijn/1191

Support trueValue and falseValue
This commit is contained in:
Aresn 2017-08-11 13:53:52 +08:00 committed by GitHub
commit 8db7924cda
4 changed files with 56 additions and 17 deletions

View file

@ -1,7 +1,15 @@
<template> <template>
<div> <div>
<div>
<Checkbox true-value="true" false-value="false" v-model="testValue1">test string</Checkbox>
{{ testValue1 }}
</div>
<div>
<Checkbox :true-value="0" :false-value="1" v-model="testValue2">test number</Checkbox>
{{ testValue2 }}
</div>
<Checkbox-group v-model="fruit"> <Checkbox-group v-model="fruit">
<Checkbox v-for="item in tags" :label="item.label" :key="item"></Checkbox> <Checkbox v-for="item in tags" :label="item.label" :key="item.label" true-value="true"></Checkbox>
</Checkbox-group> </Checkbox-group>
<div>{{ fruit }}</div> <div>{{ fruit }}</div>
</div> </div>
@ -12,7 +20,9 @@
return { return {
social: ['facebook', 'github'], social: ['facebook', 'github'],
fruit: ['苹果'], fruit: ['苹果'],
tags: [] tags: [],
testValue1: null,
testValue2: null
} }
}, },
mounted () { mounted () {

View file

@ -1,11 +1,13 @@
<template> <template>
<div> <div>
<Radio true-value="true" false-value="false" v-model="testValue">test</Radio> {{ testValue }}
<Radio-group v-model="date.sex"> <Radio-group v-model="date.sex">
<div v-if="show"> <div v-if="show">
<Radio label="male"></Radio> <Radio label="male" true-value="true" false-value="false"></Radio>
<Radio label="female"></Radio> <Radio label="female" true-value="true" false-value="false"></Radio>
</div> </div>
</Radio-group> </Radio-group>
{{ date }}
<Button @click="handleChange">change</Button> <Button @click="handleChange">change</Button>
</div> </div>
</template> </template>
@ -16,7 +18,8 @@
date: { date: {
sex: 'male' sex: 'male'
}, },
show: false show: false,
testValue: null
} }
}, },
methods: { methods: {

View file

@ -36,7 +36,15 @@
default: false default: false
}, },
value: { value: {
type: Boolean, type: [String, Number, Boolean],
default: false
},
trueValue: {
type: [String, Number, Boolean],
default: true
},
falseValue: {
type: [String, Number, Boolean],
default: false default: false
}, },
label: { label: {
@ -102,21 +110,26 @@
const checked = event.target.checked; const checked = event.target.checked;
this.currentValue = checked; this.currentValue = checked;
this.$emit('input', checked);
let value = checked ? this.trueValue : this.falseValue;
this.$emit('input', value);
if (this.group) { if (this.group) {
this.parent.change(this.model); this.parent.change(this.model);
} else { } else {
this.$emit('on-change', checked); this.$emit('on-change', value);
this.dispatch('FormItem', 'on-form-change', checked); this.dispatch('FormItem', 'on-form-change', value);
} }
}, },
updateModel () { updateModel () {
this.currentValue = this.value; this.currentValue = this.value === this.trueValue;
} }
}, },
watch: { watch: {
value () { value (val) {
if (val !== this.trueValue && val !== this.falseValue) {
throw 'Value should be trueValue or falseValue.';
}
this.updateModel(); this.updateModel();
} }
} }

View file

@ -22,7 +22,15 @@
mixins: [ Emitter ], mixins: [ Emitter ],
props: { props: {
value: { value: {
type: Boolean, type: [String, Number, Boolean],
default: false
},
trueValue: {
type: [String, Number, Boolean],
default: true
},
falseValue: {
type: [String, Number, Boolean],
default: false default: false
}, },
label: { label: {
@ -83,7 +91,9 @@
const checked = event.target.checked; const checked = event.target.checked;
this.currentValue = checked; this.currentValue = checked;
this.$emit('input', checked);
let value = checked ? this.trueValue : this.falseValue;
this.$emit('input', value);
if (this.group && this.label !== undefined) { if (this.group && this.label !== undefined) {
this.parent.change({ this.parent.change({
@ -92,16 +102,19 @@
}); });
} }
if (!this.group) { if (!this.group) {
this.$emit('on-change', checked); this.$emit('on-change', value);
this.dispatch('FormItem', 'on-form-change', checked); this.dispatch('FormItem', 'on-form-change', value);
} }
}, },
updateValue () { updateValue () {
this.currentValue = this.value; this.currentValue = this.value === this.trueValue;
} }
}, },
watch: { watch: {
value () { value (val) {
if (val !== this.trueValue && val !== this.falseValue) {
throw 'Value should be trueValue or falseValue.';
}
this.updateValue(); this.updateValue();
} }
} }