44 lines
1.4 KiB
JavaScript
44 lines
1.4 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = {
|
|
install: function install(Vue) {
|
|
var options =
|
|
arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
var directiveName = options.name || "ref";
|
|
Vue.directive(directiveName, {
|
|
bind: function bind(el, binding, vnode) {
|
|
Vue.nextTick(function() {
|
|
binding.value(vnode.componentInstance || el, vnode.key);
|
|
});
|
|
binding.value(vnode.componentInstance || el, vnode.key);
|
|
},
|
|
update: function update(el, binding, vnode, oldVnode) {
|
|
if (oldVnode.data && oldVnode.data.directives) {
|
|
var oldBinding = oldVnode.data.directives.find(function(directive) {
|
|
var name = directive.name;
|
|
return name === directiveName;
|
|
});
|
|
if (oldBinding && oldBinding.value !== binding.value) {
|
|
oldBinding && oldBinding.value(null, oldVnode.key);
|
|
binding.value(vnode.componentInstance || el, vnode.key);
|
|
return;
|
|
}
|
|
}
|
|
// Should not have this situation
|
|
if (
|
|
vnode.componentInstance !== oldVnode.componentInstance ||
|
|
vnode.elm !== oldVnode.elm
|
|
) {
|
|
binding.value(vnode.componentInstance || el, vnode.key);
|
|
}
|
|
},
|
|
unbind: function unbind(el, binding, vnode) {
|
|
binding.value(null, vnode.key);
|
|
}
|
|
});
|
|
}
|
|
};
|