Commit 2d5ba278377194ec9c40ab3b8f1de50c74be8280
1 parent
e31ab8ad
support Switch
support Switch
Showing
7 changed files
with
41 additions
and
31 deletions
Show diff stats
CHANGE.md
| @@ -7,4 +7,6 @@ value 改为了 label,使用 v-model,废弃 checked | @@ -7,4 +7,6 @@ value 改为了 label,使用 v-model,废弃 checked | ||
| 7 | ### Checkbox | 7 | ### Checkbox |
| 8 | 使用 v-model | 8 | 使用 v-model |
| 9 | ### CheckboxGroup | 9 | ### CheckboxGroup |
| 10 | -value 改为了 label,使用 v-model,废弃 checked | ||
| 11 | \ No newline at end of file | 10 | \ No newline at end of file |
| 11 | +value 改为了 label,使用 v-model,废弃 checked | ||
| 12 | +### Switch | ||
| 13 | +废弃checked, 改为了 value,使用 v-model | ||
| 12 | \ No newline at end of file | 14 | \ No newline at end of file |
README.md
src/components/switch/switch.vue
| 1 | <template> | 1 | <template> |
| 2 | <span :class="wrapClasses" @click="toggle"> | 2 | <span :class="wrapClasses" @click="toggle"> |
| 3 | <span :class="innerClasses"> | 3 | <span :class="innerClasses"> |
| 4 | - <slot name="open" v-if="checked"></slot> | ||
| 5 | - <slot name="close" v-if="!checked"></slot> | 4 | + <slot name="open" v-if="currentValue"></slot> |
| 5 | + <slot name="close" v-if="!currentValue"></slot> | ||
| 6 | </span> | 6 | </span> |
| 7 | </span> | 7 | </span> |
| 8 | </template> | 8 | </template> |
| @@ -13,7 +13,7 @@ | @@ -13,7 +13,7 @@ | ||
| 13 | 13 | ||
| 14 | export default { | 14 | export default { |
| 15 | props: { | 15 | props: { |
| 16 | - checked: { | 16 | + value: { |
| 17 | type: Boolean, | 17 | type: Boolean, |
| 18 | default: false | 18 | default: false |
| 19 | }, | 19 | }, |
| @@ -27,12 +27,17 @@ | @@ -27,12 +27,17 @@ | ||
| 27 | } | 27 | } |
| 28 | } | 28 | } |
| 29 | }, | 29 | }, |
| 30 | + data () { | ||
| 31 | + return { | ||
| 32 | + currentValue: this.value | ||
| 33 | + } | ||
| 34 | + }, | ||
| 30 | computed: { | 35 | computed: { |
| 31 | wrapClasses () { | 36 | wrapClasses () { |
| 32 | return [ | 37 | return [ |
| 33 | `${prefixCls}`, | 38 | `${prefixCls}`, |
| 34 | { | 39 | { |
| 35 | - [`${prefixCls}-checked`]: this.checked, | 40 | + [`${prefixCls}-checked`]: this.currentValue, |
| 36 | [`${prefixCls}-disabled`]: this.disabled, | 41 | [`${prefixCls}-disabled`]: this.disabled, |
| 37 | [`${prefixCls}-${this.size}`]: !!this.size | 42 | [`${prefixCls}-${this.size}`]: !!this.size |
| 38 | } | 43 | } |
| @@ -48,9 +53,17 @@ | @@ -48,9 +53,17 @@ | ||
| 48 | return false; | 53 | return false; |
| 49 | } | 54 | } |
| 50 | 55 | ||
| 51 | - this.checked = !this.checked; | ||
| 52 | - this.$emit('on-change', this.checked); | ||
| 53 | - this.$dispatch('on-form-change', this.checked); | 56 | + const checked = !this.currentValue; |
| 57 | + this.currentValue = checked; | ||
| 58 | + this.$emit('input', checked); | ||
| 59 | + this.$emit('on-change', checked); | ||
| 60 | + // todo 事件 | ||
| 61 | +// this.$dispatch('on-form-change', this.checked); | ||
| 62 | + } | ||
| 63 | + }, | ||
| 64 | + watch: { | ||
| 65 | + value (val) { | ||
| 66 | + this.currentValue = val; | ||
| 54 | } | 67 | } |
| 55 | } | 68 | } |
| 56 | }; | 69 | }; |
src/index.js
| @@ -32,7 +32,7 @@ import Radio from './components/radio'; | @@ -32,7 +32,7 @@ import Radio from './components/radio'; | ||
| 32 | // import Slider from './components/slider'; | 32 | // import Slider from './components/slider'; |
| 33 | // import Spin from './components/spin'; | 33 | // import Spin from './components/spin'; |
| 34 | import Steps from './components/steps'; | 34 | import Steps from './components/steps'; |
| 35 | -// import Switch from './components/switch'; | 35 | +import Switch from './components/switch'; |
| 36 | // import Table from './components/table'; | 36 | // import Table from './components/table'; |
| 37 | // import Tabs from './components/tabs'; | 37 | // import Tabs from './components/tabs'; |
| 38 | // import Tag from './components/tag'; | 38 | // import Tag from './components/tag'; |
| @@ -98,7 +98,7 @@ const iview = { | @@ -98,7 +98,7 @@ const iview = { | ||
| 98 | // Spin, | 98 | // Spin, |
| 99 | Step: Steps.Step, | 99 | Step: Steps.Step, |
| 100 | Steps, | 100 | Steps, |
| 101 | - // Switch, | 101 | + iSwitch: Switch, |
| 102 | // iTable: Table, | 102 | // iTable: Table, |
| 103 | // Tabs: Tabs, | 103 | // Tabs: Tabs, |
| 104 | // TabPane: Tabs.Pane, | 104 | // TabPane: Tabs.Pane, |
test/app.vue
| @@ -21,6 +21,7 @@ li + li { border-left: solid 1px #bbb; padding-left: 10px; margin-left: 10px; } | @@ -21,6 +21,7 @@ li + li { border-left: solid 1px #bbb; padding-left: 10px; margin-left: 10px; } | ||
| 21 | <li><router-link to="/checkbox">Checkbox</router-link></li> | 21 | <li><router-link to="/checkbox">Checkbox</router-link></li> |
| 22 | <li><router-link to="/steps">Steps</router-link></li> | 22 | <li><router-link to="/steps">Steps</router-link></li> |
| 23 | <li><router-link to="/timeline">Timeline</router-link></li> | 23 | <li><router-link to="/timeline">Timeline</router-link></li> |
| 24 | + <li><router-link to="/switch">Switch</router-link></li> | ||
| 24 | </ul> | 25 | </ul> |
| 25 | </nav> | 26 | </nav> |
| 26 | <router-view></router-view> | 27 | <router-view></router-view> |
test/main.js
| @@ -48,6 +48,10 @@ const router = new VueRouter({ | @@ -48,6 +48,10 @@ const router = new VueRouter({ | ||
| 48 | { | 48 | { |
| 49 | path: '/timeline', | 49 | path: '/timeline', |
| 50 | component: require('./routers/timeline.vue') | 50 | component: require('./routers/timeline.vue') |
| 51 | + }, | ||
| 52 | + { | ||
| 53 | + path: '/switch', | ||
| 54 | + component: require('./routers/switch.vue') | ||
| 51 | } | 55 | } |
| 52 | ] | 56 | ] |
| 53 | }); | 57 | }); |
test/routers/switch.vue
| 1 | <template> | 1 | <template> |
| 2 | - <Switch @on-change="change"></Switch> | ||
| 3 | - <Switch> | ||
| 4 | - <span slot="open">开</span> | ||
| 5 | - <span slot="close">关</span> | ||
| 6 | - </Switch> | ||
| 7 | - <Switch size="large"> | ||
| 8 | - <span slot="open">ON</span> | ||
| 9 | - <span slot="close">OFF</span> | ||
| 10 | - </Switch> | ||
| 11 | - <Switch> | ||
| 12 | - <Icon type="android-done" slot="open"></Icon> | ||
| 13 | - <Icon type="android-close" slot="close"></Icon> | ||
| 14 | - </Switch> | ||
| 15 | - <Switch :disabled="disabled"></Switch> | ||
| 16 | - <i-button type="primary" @click="disabled = !disabled">Toggle Disabled</i-button> | ||
| 17 | - <Switch size="small"></Switch> | 2 | + <div> |
| 3 | + <i-switch v-model="m1"> | ||
| 4 | + <span slot="open">开</span> | ||
| 5 | + <span slot="close">关</span> | ||
| 6 | + </i-switch> | ||
| 7 | + {{ m1 }} | ||
| 8 | + <div @click="m1 = !m1">toggle</div> | ||
| 9 | + </div> | ||
| 18 | </template> | 10 | </template> |
| 19 | <script> | 11 | <script> |
| 20 | - import { Switch, Message, iButton, Icon } from 'iview'; | ||
| 21 | export default { | 12 | export default { |
| 22 | - components: { Switch, Message, iButton, Icon }, | ||
| 23 | data () { | 13 | data () { |
| 24 | return { | 14 | return { |
| 25 | - disabled: true | 15 | + m1: false |
| 26 | } | 16 | } |
| 27 | }, | 17 | }, |
| 28 | methods: { | 18 | methods: { |
| 29 | change (status) { | 19 | change (status) { |
| 30 | - Message.info('开关状态:' + status); | 20 | + console.log(status) |
| 31 | } | 21 | } |
| 32 | } | 22 | } |
| 33 | } | 23 | } |