vue实现自定义组件挂载原型上
作者:Mosowe 发布时间:2024-04-30 10:24:11
标签:vue,组件,挂载,原型
自定义组件挂载原型上
以elementUI二次分装dialog举例
PageDialog.vue
<!-- 页面提示弹框 -->
<template>
? ? <el-dialog
? ? ? :visible.sync="show"
? ? ? class="page-dialog-wrapper"
? ? ? custom-class="page-dialog-component"
? ? ? :width="width"
? ? ? :append-to-body="true"
? ? ? :show-close="false"
? ? ? :close-on-click-modal="false">
? ? ? <div class="container">
? ? ? ? <div class="title">
? ? ? ? ? <slot name='title-icon'>
? ? ? ? ? ? <i
? ? ? ? ? ? ? :class="titleIcon"
? ? ? ? ? ? ? v-if="titleIcon">
? ? ? ? ? ? </i>
? ? ? ? ? </slot>
? ? ? ? ? {{title}}
? ? ? ? ? <i
? ? ? ? ? ? class="el-icon-close close-btn"
? ? ? ? ? ? @click="close"
? ? ? ? ? ? v-if="showClose">
? ? ? ? ? </i>
? ? ? ? </div>
? ? ? ? <div class="content">
? ? ? ? ? <slot>
? ? ? ? ? ? <div class="text" v-html="message"></div>
? ? ? ? ? </slot>
? ? ? ? ? <div class="btns" v-if="showConfirm || showCancel">
? ? ? ? ? ? <el-button
? ? ? ? ? ? ? class="btn cancel"
? ? ? ? ? ? ? @click="close"
? ? ? ? ? ? ? v-if="showCancel">
? ? ? ? ? ? ? {{cancelText}}
? ? ? ? ? ? </el-button>
? ? ? ? ? ? <el-button
? ? ? ? ? ? ? class="btn"
? ? ? ? ? ? ? @click="confirm"
? ? ? ? ? ? ? v-if="showConfirm">
? ? ? ? ? ? ? {{confirmText}}
? ? ? ? ? ? </el-button>
? ? ? ? ? </div>
? ? ? ? </div>
? ? ? </div>
? ? </el-dialog>
</template>
<script>
/**
?* slot:
?* ?default:提示文本区域,默认
?* ?title-icon:标题前面的icon
?* function:
?* ?confirm:确认按钮点击
?* ?close:取消及关闭按钮点击
?*/
export default {
? name: 'PageDialogComponent',
? components: {},
? props: {
? ? show: { // 隐藏显示
? ? ? type: Boolean,
? ? ? default: false,
? ? },
? ? width: { // 宽度
? ? ? type: String,
? ? ? default: '600px',
? ? },
? ? title: { // 标题
? ? ? type: String,
? ? ? default: '提示',
? ? },
? ? titleIcon: { // 标题icon
? ? ? type: String,
? ? ? default: '',
? ? },
? ? showCancel: { // 是否显示取消按钮
? ? ? type: Boolean,
? ? ? default: false,
? ? },
? ? cancelText: { // 取消按钮文本
? ? ? type: String,
? ? ? default: '取消',
? ? },
? ? showConfirm: { // 是否显示确认按钮
? ? ? type: Boolean,
? ? ? default: true,
? ? },
? ? confirmText: { // 确认按钮文本
? ? ? type: String,
? ? ? default: '确定',
? ? },
? ? message: { // 提示内容
? ? ? type: String,
? ? ? default: '这里是提示语',
? ? },
? ? showClose: { // 是否显示关闭按钮
? ? ? type: Boolean,
? ? ? default: true,
? ? },
? },
? methods: {
? ? // 确定
? ? confirm() {
? ? ? this.$emit('confirm');
? ? },
? ? // 关闭
? ? close() {
? ? ? this.$emit('close');
? ? },
? },
};
</script>
<style lang='less' scoped>
// 样式区
</style>
同目录新建index.js
import vue from 'vue';
// 这里就是我们刚刚创建的那个静态组件
import pageDialog from './PageDialog.vue';
// 返回一个 扩展实例构造器
const DialogConstructor = vue.extend(pageDialog);
// 定义弹出组件的函数
function showDialog(options) {
? return new Promise((resolve, reject) => {
? ? const dialogDom = new DialogConstructor({
? ? ? el: document.createElement('div'),
? ? });
? ? dialogDom.width = options.width || dialogDom.width;
? ? dialogDom.title = options.title || dialogDom.title;
? ? dialogDom.titleIcon = options.titleIcon || dialogDom.titleIcon;
? ? dialogDom.showCancel = options.showCancel || dialogDom.showCancel;
? ? dialogDom.cancelText = options.cancelText || dialogDom.cancelText;
? ? dialogDom.showConfirm = options.showConfirm || dialogDom.showConfirm;
? ? dialogDom.confirmText = options.confirmText || dialogDom.confirmText;
? ? dialogDom.message = options.message || dialogDom.message;
? ? dialogDom.showClose = options.showClose || dialogDom.showClose;
? ? dialogDom.show = true;
? ? document.body.appendChild(dialogDom.$el);
? ? dialogDom.confirm = function () { // 确定按钮
? ? ? resolve();
? ? ? dialogDom.show = false;
? ? };
? ? dialogDom.close = function () { // 取消按钮
? ? ? reject();
? ? ? dialogDom.show = false;
? ? };
? });
}
// 注册为全局组件的函数
function registryDialog() {
? // 将组件注册到 vue 的 原型链里去,
? // 这样就可以在所有 vue 的实例里面使用 this.$pageDialog()
? vue.prototype.$pageDialog = showDialog;
}
export default registryDialog;
main.js中引入
import pageDialog from '../components/page-dialog/index';
Vue.use(pageDialog)
可以html组件使用
? ? <!-- 删除前提示 -->
? ? <page-dialog
? ? :show="showDialog"
? ? showCancel
? ? message="确认删除已选产品?"
? ? @confirm="deleteChoose"
? ? @close="showDialog = false"/>
或者在js中使用
? ? ? ? this.$pageDialog({
? ? ? ? ? message: '审核后的订单有部分发生变化,确定按调整后订单支付?',
? ? ? ? ? showCancel: true,
? ? ? ? ? cancelText: '我在想想',
? ? ? ? }).then(() => {
? ? ? ? // 搞事情
? ? ? ? }).catch(() => {
? ? ? ? // 搞事情
? ? ? ? });
在原型上挂载方法和组件
挂在方法,在main.js中
Vue.prototype.langs = function lang(en, id, zh) {
? const L = this.language
? switch (L) {
? ? case 'en':
? ? ? return en || ''
? ? case 'id':
? ? ? return id || ''
? ? case 'zh':
? ? ? return zh || ''
? }
}
使用:this.langs()
注意:
1、如当前页面中的方法与原型方法名字一致,则会覆盖原型的方法
2、如果原型方法太多写在main.js中会赘余,所以一般在另外创建一个js文件,这个js文件都是全部写原型的方法,然后引入到main.js当中,然后把它放在这个位置
new Vue({
? el: '#app',
? router,
? store,
? test, // 比如这个就是js文件,放到vue上面
? components: { App },
? template: '<App/>'
})
挂载组件
import testA from '@/A'
Vue.component('testA ', testA )
使用:<testA></testA>或者<test-a><test-a/>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持asp之家。
来源:https://blog.csdn.net/skyblacktoday/article/details/115119511


猜你喜欢
- 1、添加依赖<dependency><groupId>com.baomidou</groupId><
- 本文实例讲述了Python日期时间Time模块。分享给大家供大家参考,具体如下:关于时间和日期模块python程序能用很多方式处理日期和时间
- 在我们的日常工作自动化测试当中,几乎超过一半的功能都需要利用定时的任务来推动触发,例如在我们项目中有一个定时监控模块,根据自己设置的频率定时
- 附上代码与运行结果截图:import time# 获取当前时间now = time.localtime()# 格式化日期now_ = tim
- Residual BlockResNet中最重要的组件是残差块(residual block),也称为残差单元(residual unit)
- 说实话,对于移除这个旧有功能对于我来说,我是欢心鼓舞的。因为我在开发和应用当中一向不用expression来处理,虽然它确实是非常方便,比如
- 具体代码如下所示:import sysimport osclass Logger(object): def __init__(s
- Step 1:Creating a Linked Server. EXEC sp_addlinkedserver 'ADSI'
- 一、前言大家好,今天我来介绍我接一个Python单子。我完成这个单子前后不到2小时。首先我接到这个单子的想法是处理Excel表,在两个表之间
- 这篇文章介绍如何利用Selenium的方法进行截图,在测试过程中,是有必要截图,特别是遇到错误的时候进行截图。在selenium for P
- 本文实例为大家分享了python实现五子棋游戏的具体代码,供大家参考,具体内容如下checkerboard.pyfrom collectio
- 1. 设置本地git账户邮箱和用户名输入命令git config --global user.name "Git账号"以
- 如果你听说过“测试驱动开发”(TDD:Test-Driven Development),单元测试就不陌生。单元测试是用来对一个模块、一个函数
- 前言因为自已平时会把一个常用到逻辑写成一个工具python脚本,像关于时间字符串处理,像关于路径和文件夹遍历什么的工具。每一次新建一个项目的
- 【前言】 之前由于小编的错误操作误删了注册表中的一项关于sql的内容,具体删了什么,也忘
- 没人愿意等待。所以,没有访问者真的能够忍受一个打开速度极慢的网站。但是,网页打开速度到底对用户行为有什么影响,恐怕没几个人能够说清楚吧。前几
- 爬取过程:你好,李焕英 短评的URL:https://movie.douban.com/subject/34841067/comments?
- 今天写的代码片段:X = Y = []..X.append(x)Y.append(y)其中x和y是读取的每一个数据的xy值,打算将其归入列表
- 前言:随着移动端的普及出现了很多的移动 APP,应用软件也随之流行起来。最近又捡起来了英雄联盟手游,感觉还行,PC 端英雄联盟可谓是爆火的游
- IE历来被web标准的拥护者所诟病,而当FireFox横空出世以后,更多的网页制作者开始关注web标准设计。看着FireFox的市场占有率不