index.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = {
  6. install: function install(Vue) {
  7. var options =
  8. arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  9. var directiveName = options.name || "ref";
  10. Vue.directive(directiveName, {
  11. bind: function bind(el, binding, vnode) {
  12. Vue.nextTick(function() {
  13. binding.value(vnode.componentInstance || el, vnode.key);
  14. });
  15. binding.value(vnode.componentInstance || el, vnode.key);
  16. },
  17. update: function update(el, binding, vnode, oldVnode) {
  18. if (oldVnode.data && oldVnode.data.directives) {
  19. var oldBinding = oldVnode.data.directives.find(function(directive) {
  20. var name = directive.name;
  21. return name === directiveName;
  22. });
  23. if (oldBinding && oldBinding.value !== binding.value) {
  24. oldBinding && oldBinding.value(null, oldVnode.key);
  25. binding.value(vnode.componentInstance || el, vnode.key);
  26. return;
  27. }
  28. }
  29. // Should not have this situation
  30. if (
  31. vnode.componentInstance !== oldVnode.componentInstance ||
  32. vnode.elm !== oldVnode.elm
  33. ) {
  34. binding.value(vnode.componentInstance || el, vnode.key);
  35. }
  36. },
  37. unbind: function unbind(el, binding, vnode) {
  38. binding.value(null, vnode.key);
  39. }
  40. });
  41. }
  42. };