使用vue组件封装共用的组件

 更新时间:2022年05月27日 11:49:10   作者:养只猫  
这篇文章主要介绍了使用vue组件封装共用的组件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

这里提供两种vue封装共用组件的方法

方法一

main.js中

import ListItem from './components/list.vue'//封装共用组件方法一
Vue.component('ListItem',ListItem)

方法二

新建vue文件的时候再建个相应的js文件。

component.js

import child from './component.vue'
 
export default child.install = function (Vue) {
  Vue.component(child.name,child)
}

main.js中

import child from './components/component/component.js'//封装共用组件方法二
Vue.use(child)

通过上面的两种方法定义公共组件后都可以直接<child>和<component>这样调用组件了,无需在每个vue文件中important组件了。

说说方法二吧根据官方文档提供的api

vue使用install定义安装全局组件需要install和use这两个api来配合才能完成。我更喜欢第一种但是今天看了公司的代码认识到了第二种方法,也发现了vue提供了不少提高生产效率的api往后会继续深入去学习这些api。

同时也解决了一个困惑很长时间的问题,element ui中的message这个组件不需要vue.use安装直接就能用,因为element源码中直接将这个组件赋值到vue的prototype上了,其他的组件都只export 暴露出install方法所以其他组件需要vue.use安装

vue封装公共组件调用方法

需求:项目中所有的提示信息都是弹框样式的,并且显示两秒后自动消失

vue页面

<template>
  <!-- 公用提示信息页面 -->
  <el-dialog
    title="提示"
    :visible.sync="dialogVisible"
    :show-close="false"
    top="40vh"
    width="30%"
  >
    <div class="content">
      <span>{{ text }}</span>
    </div>
  </el-dialog>
</template>
<script>
export default {
  data() {
    return {
      dialogVisible: true,
      text: ""
    };
  }
};
</script>
<style lang="less" scoped>
.content {
  font-size: 16px;
  color: #333;
  text-align: center;
  span {
    margin-left: 10px;
  }
}
/deep/ .el-dialog__header {
  padding: 0;
  height: 50px;
  line-height: 50px;
  text-align: center;
  font-weight: 600;
  background-color: #08519c;
}
/deep/ .el-dialog__title {
  color: #fff;
}
</style>

js页面

// 公共提示信息js
import Vue from "vue";
import Toast from "./dialogMessage.vue"; //引入组件
// 返回一个“扩展实例构造器”
let ToastConstructor = Vue.extend(Toast);
let myToast = (text, duration) => {
  let toastDom = new ToastConstructor({
    el: document.createElement("div") //将toast组件挂载到新创建的div上
  });
  document.body.appendChild(toastDom.$el); //把toast组件的dom添加到body里
  toastDom.text = text;
  toastDom.duration = duration;
  // 在指定 duration 之后让 toast消失
  setTimeout(() => {
    toastDom.dialogVisible = false;
  }, toastDom.duration);
  // 调用时  this.$toast("新内容", 1000);
};
export default myToast;

在main.js中全局注册

import toast from "./components/dialogMessage.js"; //引入toast函数
  //给Vue对象添加$toast方法
  Vue.prototype.$toast = toast;

页面中使用,像使用message一样

 this.$toast("新内容", 1000);

效果

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue与Node.js通过socket.io通信的示例代码

    Vue与Node.js通过socket.io通信的示例代码

    这篇文章主要介绍了Vue与Node.js通过socket.io通信的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • vue button的@click方法无效钩子函数没有执行问题

    vue button的@click方法无效钩子函数没有执行问题

    这篇文章主要介绍了vue button的@click方法无效钩子函数没有执行问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • LogicFlow插件使用前准备详解

    LogicFlow插件使用前准备详解

    这篇文章主要为大家介绍了LogicFlow插件使用前准备详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • vue v-for中key的原理详析

    vue v-for中key的原理详析

    key属性可以用来提升v-for渲染的效率,vue中使用v-for渲染数据的时候,并不会去改变原有的元素和数据,下面这篇文章主要给大家介绍了关于vue v-for中key原理的相关资料,需要的朋友可以参考下
    2022-04-04
  • Element基于el-input数字范围输入框的实现

    Element基于el-input数字范围输入框的实现

    本文主要介绍了 Element基于el-input数字范围输入框的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Vue3 实现验证码倒计时功能(刷新保持状态)

    Vue3 实现验证码倒计时功能(刷新保持状态)

    倒计时的运用场景是需要经常用到的,但是根据业务的不同,好比手机验证码或者是邮箱验证码之类的,即使用户跳转到其它页面或者刷新,再次回到登录也,验证码的倒计时也得保持状态,下面通过本文给大家分享Vue3 验证码倒计时功能实现,感兴趣的朋友一起看看吧
    2022-08-08
  • Vue的H5页面唤起支付宝支付功能

    Vue的H5页面唤起支付宝支付功能

    目前项目中比较常用的第三方支付无非就是支付宝支付和微信支付。下面介绍一下Vue中H5页面如何使用支付宝支付。这篇文章主要介绍了Vue的H5页面唤起支付宝支付,需要的朋友可以参考下
    2019-04-04
  • Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)

    Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)

    最近小编接到这样的需求:弹出框(或Popover)在 show 后,点击空白处可以将其 hide。针对这个需求,小编整理了三种实现方式,如果大家对vue 点击空白隐藏节点问题感兴趣的朋友跟随小编一起看看吧
    2019-10-10
  • Vue3实现地图选点组件的示例代码

    Vue3实现地图选点组件的示例代码

    这篇文章主要为大家详细介绍了Vue3实现地图选点组件的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • vue中组件通信的八种方式(值得收藏!)

    vue中组件通信的八种方式(值得收藏!)

    这篇文章主要给大家总结介绍了关于vue中八种组件通信方式的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08

最新评论