• 通过Vue.extned动态创建组件


    官方文档:https://cn.vuejs.org/v2/api/#Vue-extend

    vue.extend使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象。

    extend是产生一个继承自Vue类的子类,只会影响这个子类的实例对象,不会对Vue类本身以及Vue类的实例对象产生影响。

    vue.extend相当于一个扩展实例构造器,用于创建一个具有初始化选项的Vue子类,在实例化时可以进行扩展选项,最后使用$mount方法绑定在元素上。

    通过vue.extend动态创建做全局toast

    首先创建一个toast.vue文件,该文件不写data数据

    <template>
      <transition name="toast-transition">
        <div v-show="show" class="toast">
          <div class="toast-content">{{ content }}</div>
        </div>
      </transition>
    </template>
    <style scoped>
    .toast {
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      position: fixed;
      top: 0;
      right: 0;
      bottom: 0;
      left: 0;
      z-index: 10;
      pointer-events: none;
    }
    .toast-content {
      max- 320px;
      padding: 10px 30px;
      border-radius: 10px;
      background-color: rgba(0, 0, 0, 0.8);
      font-size: 30px;
      color: #fff;
      line-height: 60px;
    }
    .toast-transition-enter-active,
    .toast-transition-leave-active {
      transition: opacity 0.5s;
    }
    .toast-transition-leave,
    .toast-transition-enter-to {
      opacity: 1;
    }
    .toast-transition-enter,
    .toast-transition-leave-to {
      opacity: 0;
    }
    </style>

    创建一个toast.js文件,,通过vue.extend方法动态创建toast文件,

    引入toast组件
    import Vue from 'vue' import toast from './toast.vue' // 动态创建组件 function showToast(content, duration = 2000) {
      // 这里创建的ToastConstructor是toast的构造函数,类似于Vue构造函数,需要通过new实例化它
    const ToastConstructor = Vue.extend(toast);

      // ToastDom是toast组件的实例,它上面有很多实例属性 let ToastDom
    = new ToastConstructor({ el: document.createElement('div'), data() { return { show: true, content }; } });
      // 元素插入body中 document.body.appendChild(ToastDom.$el);   

      // 2秒后隐藏,组件销毁,ToastDom设置为null,让垃圾回收机制回收 setTimeout(()
    => { ToastDom.show = false; setTimeout(() => { document.body.removeChild(ToastDom.$el); ToastDom.$destroy(); ToastDom = null; console.log(ToastDom); },500); },duration); } export default { install() { Vue.prototype.$toast = showToast; } };

    调用

    <script>
    export default {
      created() {
        this.$toast('hello world');
      }
    }
    </script>

    用vue.extend动态创建toast缺点:

    1、每次调用都会操作DOM,如每次都会往body里面插入元素,调用完又会移除这个元素

    2、每次调用都会创建一次组件实例

     extend使用场景

    1、当你需要在某一个场景内要使用一个新功能,该新功能只是在某组件上作一些新的逻辑新功能即可

  • 相关阅读:
    Caused by: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
    jauery加入项目中,但是在页面中显示没有找到这个文件--springMVC框架
    SpringMVC中Controller和RestController
    firefox与chrome中对select下拉框中的option支持问题
    Spring与jsp表达式的产生的问题
    javaScript基础练习题-下拉框制作(神奇的代码)
    javaScript基础练习题-下拉框制作(JQuery)
    云,git,blog,感想
    javaScript基础练习题-下拉框制作(CSS)
    javaScript基础练习题-下拉框制作
  • 原文地址:https://www.cnblogs.com/ltog/p/14331780.html
Copyright © 2020-2023  润新知