Element UI

  • npm i element-ui -S
  1. /**
  2. * src/main.js
  3. */
  4. // Element UI
  5. import ElementUI from 'element-ui';
  6. import 'element-ui/lib/theme-chalk/index.css';
  7. Vue.use(ElementUI); // 全局使用

导航守卫

  • 全局守卫
  • 路由守卫
  • 组件守卫
  1. // 组件守卫
  2. beforeRouteEnter(to, from, next) {
  3. // to 表示要去的路径 from表示离开时的路径
  4. console.log(to, from, next);
  5. // 在渲染该组件的对应路由被 confirm 前调用
  6. // 因为当守卫执行前,组件实例还没被创建
  7. // 不能访问组件 this
  8. // 访问方式 :
  9. next(vm => {
  10. // 通过 vm 访问组件实例
  11. console.log(vm);
  12. });
  13. },
  14. beforeRouteUpdate(to, from, next) {
  15. // 在当前路由改变,但是该组件被复用时调用
  16. // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
  17. // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
  18. // 可以访问组件实例 `this`
  19. },
  20. beforeRouteLeave(to, from, next) {
  21. // 导航离开该组件的对应路由时调用
  22. // 可以访问组件实例 `this`
  23. // 如果没有填写内容并且没有提交
  24. if (!this.ruleForm.username && !this.flag) {
  25. this.$confirm('是否提交', '提示', {
  26. confirmButtonText: '确定',
  27. cancelButtonText: '取消',
  28. type: 'warning',
  29. })
  30. .then(() => {
  31. next();
  32. })
  33. .catch(() => { });
  34. }else {
  35. next()
  36. }
  37. },

Vue 仿写 Element UI 弹层

  1. /**
  2. * App.vue
  3. */
  4. // import Message from './Components/Message.js';// 弹窗第一种方式
  5. // export default {
  6. // methods: {
  7. // showMessage() {
  8. // Message.info({
  9. // message: '你好',
  10. // duration: 2000,
  11. // })
  12. // }
  13. // }
  14. // }
  15. import Vue from 'vue';
  16. import { Message } from './Components/Message.js'; // 弹窗第二种方式, 暴露全局
  17. Vue.use(Message); // install
  18. export default {
  19. methods: {
  20. showMessage() {
  21. this.$message.info({
  22. message: '你好',
  23. duration: 2000,
  24. })
  25. }
  26. }
  27. }
  28. /**
  29. * 组件的核心逻辑,渲染 message 组件 并且调用核心方法
  30. * message.js
  31. */
  32. import Vue from 'vue';
  33. import MessagePopup from './MessagePopup.vue';
  34. **重点技巧知识**
  35. let getInstance = () => {
  36. let vm = new Vue({
  37. render: h => h(MessagePopup),
  38. });
  39. vm.$mount(); // 没有传参数的时候,挂载在内存中,还没有挂载到 dom 元素
  40. // 通过 vm.$el 获取 然后挂载到根实例 此时 Message 组件 就是 vm 实例的子组件
  41. document.body.appendChild(vm.$el);
  42. // 拿取子组件上的核心方法 $parent $children(获取所有的子组件)
  43. let component = vm.$children[0];
  44. return {
  45. add: options => {
  46. component.add(options); //add 再次封装
  47. },
  48. };
  49. };
  50. **重点技巧知识**
  51. // 单例模式解决 多次初始化 vue 的问题
  52. let instance;
  53. let getIns = () => {
  54. //判断 instance 有无值,有值 说明 vue 已经初始化过了
  55. instance = instance || getInstance();
  56. return instance;
  57. };
  58. const Message = {
  59. info(options) {
  60. getIns().add(options);
  61. },
  62. success() {},
  63. };
  64. // export default Message;
  65. // 使用 vue.use 会调用 install 方法
  66. Message.install = (Vue)=> {
  67. // alert(1)
  68. // Message 的方法 放入 $message 中
  69. let $message = {}
  70. Object.keys(Message).forEach(key=>{
  71. $message[key] = Message[key]
  72. })
  73. // 把 $message 放入 Vue 原型上
  74. // console.log($message);
  75. Vue.prototype.$message = $message;
  76. }
  77. // 第二种方式导出
  78. export { Message };

基于 Element UI 封装树形控件

  • 树形菜单的接口
  • 通过axios调用接口
  • 格式化数据
  • 自定义树形组件
  • 扩展操作的列表
  • 点击切换输入框
  • 确认修改
  • 删除文件或文件夹

以上更新于 2020 年 1 月 4 日