vue-decorator-ref
Version:
vue-decorator-ref =====================
62 lines (61 loc) • 1.77 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var vue_class_component_1 = require("vue-class-component");
var decamelize_1 = __importDefault(require("decamelize"));
// export interface RefExtendsOptions{
// /**
// * refName => member
// */
// $$__refs : {[key:string] : string}
// }
/**
* decorator of an inject
* @param key key
* @return PropertyDecorator
*/
function Ref(refName) {
return vue_class_component_1.createDecorator(function (componentOptions, k) {
if (typeof componentOptions.$$__refs === 'undefined') {
componentOptions.$$__refs = {};
}
if (!refName) {
refName = k;
}
componentOptions.$$__refs[refName] = k;
});
}
exports.Ref = Ref;
function inject(vue) {
var refs = vue.$options.$$__refs;
if (refs) {
var keys = Object.keys(refs);
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
var key = keys_1[_i];
var componenet = vue.$refs[key];
if (componenet == null) {
componenet = vue.$refs[decamelize_1.default(key, '-')];
}
if (componenet) {
vue[refs[key]] = componenet;
}
else {
// console.warn("@Ref not found ref componet '"+key+"'");
}
}
}
}
exports.Plugin = {
install: function (Vue, options) {
Vue.mixin({
mounted: function () {
inject(this);
},
updated: function () {
inject(this);
}
});
}
};