Element UI
- npm i element-ui -S
/**
* src/main.js
*/
// Element UI
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI); // 全局使用
导航守卫
- 全局守卫
- 路由守卫
- 组件守卫
// 组件守卫
beforeRouteEnter(to, from, next) {
// to 表示要去的路径 from表示离开时的路径
console.log(to, from, next);
// 在渲染该组件的对应路由被 confirm 前调用
// 因为当守卫执行前,组件实例还没被创建
// 不能访问组件 this
// 访问方式 :
next(vm => {
// 通过 vm 访问组件实例
console.log(vm);
});
},
beforeRouteUpdate(to, from, next) {
// 在当前路由改变,但是该组件被复用时调用
// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
// 可以访问组件实例 `this`
},
beforeRouteLeave(to, from, next) {
// 导航离开该组件的对应路由时调用
// 可以访问组件实例 `this`
// 如果没有填写内容并且没有提交
if (!this.ruleForm.username && !this.flag) {
this.$confirm('是否提交', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
next();
})
.catch(() => { });
}else {
next()
}
},
Vue 仿写 Element UI 弹层
/**
* App.vue
*/
// import Message from './Components/Message.js';// 弹窗第一种方式
// export default {
// methods: {
// showMessage() {
// Message.info({
// message: '你好',
// duration: 2000,
// })
// }
// }
// }
import Vue from 'vue';
import { Message } from './Components/Message.js'; // 弹窗第二种方式, 暴露全局
Vue.use(Message); // install
export default {
methods: {
showMessage() {
this.$message.info({
message: '你好',
duration: 2000,
})
}
}
}
/**
* 组件的核心逻辑,渲染 message 组件 并且调用核心方法
* message.js
*/
import Vue from 'vue';
import MessagePopup from './MessagePopup.vue';
**重点技巧知识**
let getInstance = () => {
let vm = new Vue({
render: h => h(MessagePopup),
});
vm.$mount(); // 没有传参数的时候,挂载在内存中,还没有挂载到 dom 元素
// 通过 vm.$el 获取 然后挂载到根实例 此时 Message 组件 就是 vm 实例的子组件
document.body.appendChild(vm.$el);
// 拿取子组件上的核心方法 $parent $children(获取所有的子组件)
let component = vm.$children[0];
return {
add: options => {
component.add(options); //add 再次封装
},
};
};
**重点技巧知识**
// 单例模式解决 多次初始化 vue 的问题
let instance;
let getIns = () => {
//判断 instance 有无值,有值 说明 vue 已经初始化过了
instance = instance || getInstance();
return instance;
};
const Message = {
info(options) {
getIns().add(options);
},
success() {},
};
// export default Message;
// 使用 vue.use 会调用 install 方法
Message.install = (Vue)=> {
// alert(1)
// Message 的方法 放入 $message 中
let $message = {}
Object.keys(Message).forEach(key=>{
$message[key] = Message[key]
})
// 把 $message 放入 Vue 原型上
// console.log($message);
Vue.prototype.$message = $message;
}
// 第二种方式导出
export { Message };
基于 Element UI 封装树形控件
- 树形菜单的接口
- 通过axios调用接口
- 格式化数据
- 自定义树形组件
- 扩展操作的列表
- 点击切换输入框
- 确认修改
- 删除文件或文件夹
以上更新于 2020 年 1 月 4 日