Skip to content

Instantly share code, notes, and snippets.

@PhilReinking
Created December 14, 2017 10:45
Show Gist options
  • Save PhilReinking/fe3abd92041bbbd9c83b29bee453b1e0 to your computer and use it in GitHub Desktop.
Save PhilReinking/fe3abd92041bbbd9c83b29bee453b1e0 to your computer and use it in GitHub Desktop.
vue directive to put elements in a disabled state
/**
* Directive to easily toggle utility classes to disable elements
*
* Default usage:
* v-disabled="true" // adds default disabled classes
*
* Advanced usage:
* v-disabled:"{ disabled: true, classes: ['hidden']" // adds specified classes when disabled is true
*
*/
import Vue from 'vue'
const DEFAULT_DISABLED_CLASSES = [
'cursor-not-allowed',
'opacity-50',
]
Vue.directive('disabled', function (el, binding, vnode) {
let isDisabled = binding.value.disabled || binding.value
let disabledStateClasses = binding.value.classes || DEFAULT_DISABLED_CLASSES
if (vnode.elm && vnode.elm.classList) {
if (isDisabled) {
disabledStateClasses.forEach((item) => vnode.elm.classList.add(item))
} else {
disabledStateClasses.forEach((item) => vnode.elm.classList.remove(item))
}
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment