/**
* 动态安装组件
*/
Vue.prototype.$install = (name, options) => {
if (!options) options = {};
// var component = Vue.extend(Vue.component(name));
var component = Vue.component(name);
if (!component) {
console.error("component", name, "not exists!");
return;
}
var cmp = new component({
router: router,
store: store,
propsData: options.props ? Object.assign({
visible: true
}, options.props) : {
visible: true
},
});
if (options.events) {
for (var p in options.events) {
cmp.$on(p, options.events[p]);
}
}
if (options.el) {
cmp.$mount(options.el);
} else {
var render = document.createElement('div');
document.body.appendChild(render);
cmp.$mount(render);
}
};
/**
* 自动注册组件
*/
var components = require.context("@/components", true, /\.vue$/);
loadComponents(components);
function loadComponents (components) {
components.keys().forEach(fileName => {
const cmp = components(fileName);
var pos = fileName.lastIndexOf("/");
var name = fileName.substr(pos + 1);
var pos1 = name.lastIndexOf(".");
if (pos1 > 0) {
name = name.substr(0, pos1);
}
name = lodash.upperFirst(lodash.camelCase(name));
Vue.component(name, cmp.default || cmp);
});
}
main.js中