Vue 中使用 extend 开发组件

  • 简介:再开发过程中那面会遇到自定义 loading alert 等全局组件,这里我们可以使用 vue 中的extend 来帮助我们完成

  • 一个简单extend例子,如下:

  • 新建 index.js 文件

import Vue from "vue";
import Index from "./index.vue"; const MessageBoxConstructor = Vue.extend(Index);
const defaultInstanceCallback = action => {
console.log('---------')
}
let instance;
const initInstance = (): void => {
instance = new MessageBoxConstructor({
el: document.createElement('div')
})
instance.$mount();
document.body.appendChild(instance.$el);
return instance;
} const UseMessageBox = function (): void {
if (!instance) {
initInstance();
}
} UseMessageBox.success = () => {
UseMessageBox();
console.log('---------------', instance);
instance.showClose = false;
} export default UseMessageBox;
  • 在建一个index.vue 文件 文件内容如下
<template>
<div v-if="showClose" style=" color: #fff;position: fixed; top: 0; left: 0; bottom: 0; right: 0; background: rgba(0,0,0, .7); z-index: 9999">
MessageBox 弹
</div>
</template>
<script lang="ts">
import {defineComponent, ref} from "@vue/composition-api";
export default defineComponent({
name: 'UseMessageBox',
setup(props, _this) {
const showClose = ref<boolean>(false);
return {
showClose,
}
}
})
</script> <style lang="scss">
@import "index";
</style>
  • 调用方法 页面中引入 UseMessageBox
UseMessageBox.success()
  • 补充一下在开发过程中碰到了一个问题内容如下
 No overload matches this call.
The last overload gave the following error.
Argument of type 'VueProxy<unknown, { showClose: Ref<boolean | undefined>; options: Ref<{ title?: string | undefined; message?: string | undefined; cancel?: any; submit?: any; isShowCancel?: boolean | undefined; }>; ... 5 more ...; submit: () => void; }, Data, {}, {}>' is not assignable to parameter of type 'ComponentOptions<Vue, DefaultData<Vue>, DefaultMethods<Vue>, DefaultComputed, PropsDefinition<Record<string, any>>, Record<...>> | undefined'.
Type 'VueProxy<unknown, { showClose: Ref<boolean | undefined>; options: Ref<{ title?: string | undefined; message?: string | undefined; cancel?: any; submit?: any; isShowCancel?: boolean | undefined; }>; ... 5 more ...; submit: () => void; }, Data, {}, {}>' is not assignable to type 'ComponentOptions<Vue, DefaultData<Vue>, DefaultMethods<Vue>, DefaultComputed, PropsDefinition<Record<string, any>>, Record<...>>'.
Types of property 'props' are incompatible.
Type 'unknown' is not assignable to type 'ArrayPropsDefinition<Record<string, any>> | RecordPropsDefinition<Record<string, any>> | undefined'.
Type 'unknown' is not assignable to type 'RecordPropsDefinition<Record<string, any>>'. 没有与此调用匹配的重载。 上一次重载导致以下错误。 类型为“VueProxy<unknown,{showClose:Ref<boolean | undefined>”的参数;选项:Ref<{title?:string | undefined;message?:string | undefined;cancel?:any;submit?:boolean | undefined;}>…5更多…;submit:=>void;},Data,{},{}>”不能分配给类型为“ComponentOptions”的参数,DefaultMethods<Vue>,DefaultComputed,PropsDefinition<Record<string,any>>,Record<…>|undefined'。 键入“VueProxy<unknown,{showClose:Ref<boolean | undefined>;选项:Ref<{title?:string | undefined;message?:string | undefined;cancel?:any;isshowconcel?:boolean | undefined;}5更多…;submit:()=>void;},Data,{},{}>“不可分配给类型”ComponentOptions<Vue,DefaultData<Vue>,DefaultData<Vue>,DefaultMethods<Vue>,DefaultComputed,PropsDefinition<Record<string,any>>,Record<…>>。 属性“props”的类型不兼容。 类型“unknown”不可分配给类型“ArrayPropsDefinition<Record<string,any>>| RecordPropsDefinition<Record<string,any>>| undefined”。 类型“未知”不能分配给类型“RecordPropsDefinition<Record<string,any>>”。
  • 百度了一下,大概明白是什么意思,就是 ComponentOptions 这个的原因

    了解ComponentOptions

解决: 在代码中添加 props: {}

此内容后续待补充。。。

Vue 中使用 extent 开发loading等全局 组件的更多相关文章

  1. 循序渐进VUE+Element 前端应用开发(20)--- 使用组件封装简化界面代码

    VUE+Element 前端应用,比较不错的一点就是界面组件化,我们可以根据重用的指导方针,把界面内容拆分为各个不同的组合,每一个模块可以是一个组件,也可以是多个组件的综合体,而且这一个过程非常方便. ...

  2. Vue中Js动画 与Velocity.js 多组件多元素 列表过渡

    Vue提供我们很多js动画钩子 写在tansition标签内部 入场动画 @before-enter="" 处理函数收到一个参数(e l) el为这个元素 @enter=" ...

  3. vue中html模板使用绑定的全局函数

    我们知道在script中使用vue绑定的全局函数时, 我们需要用这种方式使用: this.Util.Fun(e) 那在模板中, 比如v-if中想使用Fun函数怎么办呢?你应该这样做 <i v-i ...

  4. vue中alert toast confirm loading 公用

    import Vue from 'vue' import { ToastPlugin, AlertPlugin, ConfirmPlugin, LoadingPlugin } from 'vux' / ...

  5. vue中允许你继续使用swiper的组件 vue-awesome-swiper---切图网

    swiper是一个在切图中好用到不行的图片轮播插件,包括3d轮播.h5滑屏等复杂应用都不在话下,到了vue项目一切逻辑完全颠覆了,没有获取dom的概念,还好有 vue-awesome-swiper组件 ...

  6. vue中.sync修饰符,实现子组件实时更新父组件的值

    vue 修饰符sync的功能是:当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定. 不过它有一个前身,先来看看.sync出现之前是如何实现的 父组件中(传递给子组件一个值:p ...

  7. 在vue中结合render函数渲染指定的组件到容器中

    1.demo 项目结构: index.html <!DOCTYPE html> <html> <head> <title>标题</title> ...

  8. vue中的路由传参及跨组件传参

    路由跳转   this.$router.push('/course'); this.$router.push({name: course}); this.$router.go(-1); this.$r ...

  9. vue中多个元素或多个组件之间的动画效果

    多个元素的过渡 <style> .v-enter,.v-leave-to{ opacity: 0; } .v-enter-acitve,.v-leave-active{ opacity: ...

随机推荐

  1. 汇编--LDR

    转载:https://my.oschina.net/zengsai/blog/23733 ARM LDR 伪指令的格式: LDR Rn, =expr 如果name是立即数的话LDR R0,=0X123 ...

  2. hdu 4788 Hard Disk Drive (水题)

    题意: Input The first line contains an integer T, which indicates the number of test cases. For each t ...

  3. Beam Search快速理解及代码解析

    目录 Beam Search快速理解及代码解析(上) Beam Search 贪心搜索 Beam Search Beam Search代码解析 准备初始输入 序列扩展 准备输出 总结 Beam Sea ...

  4. Delphi的手机程序隐藏顶部信号栏

    把TForm的BorderStyle设置为None 记之!

  5. Docker 制作Nginx镜像

    参考文章:https://www.jianshu.com/p/dc4cd0547d1e 镜像的制作方式有两种,一种是下载别人的镜像之后再制作成自己的镜像,一种是从头开始制作自己的镜像 第一种,下载别人 ...

  6. Linux ps -ef 命令输出解释

    UID: 程序拥有者PID:程序的 IDPPID:程序父级程序的 IDC:  CPU 使用的百分比STIME: 程序的启动时间TTY: 登录终端TIME : 程序使用掉 CPU 的时间CMD: 下达的 ...

  7. Redis INFO CPU 信息详解

    一.INFO CPU 通过INFO CPU命令可以查看Redis进程对于CPU的使用情况,如下: 这几个字段的含义如下所示: used_cpu_sys: System CPU consumed by ...

  8. Socket `accept queue is full ` 但是一个连接需要从SYN->ACCEPT

    由于标题长度有限制,我把想要描述的问题再次描述下: 内核通常会为每一个LISTEN状态的Socket维护两个队列: 1 accept队列: listen()函数第二个参数BACKLOG指定,表示已完成 ...

  9. SpringCloud概念

    SpringCloud概述 1.SpringCloud是什么? 官方解释:  官网: https://spring.io/projects/spring-cloud/  SpringCloud是一系列 ...

  10. elementUI合并表格span-method用法

    官方文档 参考链接一 参考链接二