diff options
| author | taehoon <th.dev91@gmail.com> | 2019-04-06 13:14:43 -0400 |
|---|---|---|
| committer | taehoon <th.dev91@gmail.com> | 2019-04-17 11:32:49 -0400 |
| commit | 468aec0de1b7e25a66eb9e6ef44cf9787d0c6d86 (patch) | |
| tree | 1f9a18befcfc9af06a22636392e1da8b70b24cda /src/components/checkbox | |
| parent | ac9ddfb1e2948968b6f08c68b689888ed56b9779 (diff) | |
rewrite checkbox component as non-functional
Diffstat (limited to 'src/components/checkbox')
| -rw-r--r-- | src/components/checkbox/checkbox.js | 44 | ||||
| -rw-r--r-- | src/components/checkbox/checkbox.vue (renamed from src/components/checkbox/checkbox.scss) | 16 |
2 files changed, 15 insertions, 45 deletions
diff --git a/src/components/checkbox/checkbox.js b/src/components/checkbox/checkbox.js deleted file mode 100644 index 76e7e4f4..00000000 --- a/src/components/checkbox/checkbox.js +++ /dev/null @@ -1,44 +0,0 @@ -// TODO: Template-based functional component is supported in vue-loader 13.3.0+. -// Also, somehow, props are not provided through 'context' even though they are defined. -// Need to upgrade vue-loader - -import './checkbox.scss' - -export default { - functional: true, - name: 'Checkbox', - model: { - prop: 'checked', - event: 'change' - }, - render (createElement, { data, children }) { - const { props = {}, attrs = {}, on = {}, ...rest } = data - const { name, checked, disabled, readonly, ...restAttrs } = attrs - const { change, ...restListeners } = on - const wrapperProps = { - attrs: restAttrs, - on: restListeners, - ...rest - } - const inputProps = { - attrs: { - name, - checked, - disabled, - readonly, - ...props - }, - on: {} - } - if (change) { - inputProps.on.change = e => change(e.target.checked) - } - return ( - <label class="checkbox" {...wrapperProps}> - <input type="checkbox" {...inputProps} /> - <i class="checkbox-indicator" /> - {children && <span>{children}</span>} - </label> - ) - } -} diff --git a/src/components/checkbox/checkbox.scss b/src/components/checkbox/checkbox.vue index 42556d89..5f55c5bf 100644 --- a/src/components/checkbox/checkbox.scss +++ b/src/components/checkbox/checkbox.vue @@ -1,5 +1,18 @@ -@import '../../_variables.scss'; +<template> + <label class="checkbox"> + <input type="checkbox" :checked="value" @change="$emit('input', $event.target.checked)"> + <i class="checkbox-indicator" /> + <span><slot></slot></span> + </label> +</template> +<script> +export default { + props: ['value'] +} +</script> + +<style lang="scss"> .checkbox { position: relative; display: inline-block; @@ -47,3 +60,4 @@ margin-left: .5em; } } +</style> |
