我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue怎么使用Vue.extend创建全局toast组件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue怎么使用Vue.extend创建全局toast组件

本篇内容主要讲解“vue怎么使用Vue.extend创建全局toast组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么使用Vue.extend创建全局toast组件”吧!

Vue.extend创建全局toast组件

class="lazy" data-src -> components -> Toast -> toast.vue

<template>  <transition name="fades">    <div class="Errormes"  v-if="show">{{txt}}</div>  </transition></template> <script>export default {  name: 'Toast',  data () {    return {      txt: '',      show: false    }  }}</script><style lang="less" scoped>.fades-enter-active, .fades-leave-active {  transition: opacity 0.5s;}.fades-enter, .fades-leave-active {  opacity: 0;}.Errormes {  position: fixed;  top: 40%;  left: 50%;  -webkit-transform: translate(-50%, -50%);  transform: translate(-50%, -50%);  padding: 20px 30px;  background: rgba(0, 0, 0, 0.8);  border-radius: 16px;  color: #fff;  font-size: 28px;  z-index: 999999;  max-width: 80%;  height: auto;  line-height: 60px;  text-align: center;}</style>

class="lazy" data-src -> components -> Toast -> index.js

import Toast from './toast.vue' const toast = {}toast.install = (vue) => {  const ToastClass = vue.extend(Toast)  const instance = new ToastClass()  instance.$mount(document.createElement('div'))  document.body.appendChild(instance.$el)   let t = null  const ToastMain = {    show (msg, seconds = 2000) {      if (t) clearTimeout(t)      instance.txt = msg      instance.show = true      t = setTimeout(() => {        instance.show = false      }, seconds)    }  }  vue.prototype.$toast = ToastMain} export default toast

main.js

import Vue from 'vue'import App from './App.vue'import toast from '@/components/Toast/index' Vue.use(toast)

使用

$toast.show(message)

关于vue.extend的理解应用

基本概念

Vue.extend( options )

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

一般,我们会用 Vue.extend 接收一个组件对象来创建一个构造器,再利用创建的构造器 new 一个实例,并将这个实例挂载到一个元素上。

官网基本示例

<div id="mount-point"></div>// 创建构造器var Profile = Vue.extend({  template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',  data: function () {    return {      firstName: 'Walter',      lastName: 'White',      alias: 'Heisenberg'    }  }})// 创建 Profile 实例,并挂载到一个元素上。new Profile().$mount('#mount-point')

data 选项是特例,需要注意 - 在 Vue.extend() 中它必须是函数

结果如下:

<p>Walter White aka Heisenberg</p>

应用

Vue.extend 属于 Vue 的全局 API,在实际业务开发中我们很少使用,因为相比常用的 Vue.component 写法使用 extend 步骤要更加繁琐一些。

但是在一些独立组件开发场景中,例如要实现一个类似于 window.alert() 提示组件,要求像调用 JS 函数一样调用它,这时候 Vue.extend + $mount 这对组合就是我们需要去关注的。

1、vue $mount 和 el的区别说明

在应用之前我们先了解一下2个东西 &mdash;&mdash; $mount 和 el,两者在使用效果上没有任何区别,都是为了将实例化后的vue挂载到指定的dom元素中。

如果在实例化vue的时候指定el,则该vue将会渲染在此el对应的dom中,反之,若没有指定el,则vue实例会处于一种“未挂载”的状态,此时可以通过$mount来手动执行挂载。

注:如果$mount没有提供参数,模板将被渲染为文档之外的的元素,并且你必须使用原生DOM API把它插入文档中。

var MyComponent = Vue.extend({ template: '<div>Hello!</div>'}) // 创建并挂载到 #app (会替换 #app)new MyComponent().$mount('#app') // 同上new MyComponent({ el: '#app' }) // 或者,在文档之外渲染并且随后挂载var component = new MyComponent().$mount()document.getElementById('app').appendChild(component.$el)

Vue.extend实现Loading插件($mount)

<div id="root">    <button @click="showLoading">显示Loading</button></div>function Loading(msg) {        // 创建构造器        const Loading = Vue.extend({          template: '<div id="loading-msg">{{ msg }}</div>',          props: {            msg: {              type: String,              default: '加载中'            }          },          name: 'Loading'        })         // 创建挂载div        const div = document.createElement('div')        div.setAttribute('id', 'loading-div')        document.body.append(div)         // 创建实例并挂载到一个元素上        new Loading().$mount('#loading-div')         // 返回一个移除元素的function        return () => {          document.body.removeChild(document.getElementById('loading-div'))        }} // 挂载到vue实例上Vue.prototype.$loading = Loading  new Vue({     el: '#root',     methods: {        showLoading() {            const hide = this.$loading('正在加载,请稍等...')            setTimeout(() => {              hide()            }, 1500)        }     }})

3、Vue.extend实现信息弹窗插件(el)

新建一个popBox.vue

<template>  <div id="confirm" v-if='flag'>    <div class="contents" >      <div class="content-top">{{ text.title }}</div>      <div class="content-center">{{ text.msg }}</div>      <div class="content-bottom">        <button @click='show' class="left">{{ text.btn.ok }}</button>        <button @click='hide' class="right">{{ text.btn.no }}</button>      </div>    </div>  </div></template> <script> export default {  data () {    return {      flag: true,      text: {          title:'标题',          msg: '这是一个信息弹出框组件',          btn: {              ok: '确定',              no: '取消'          }      }    }  },   methods: {    show (){      this.flag = false;    },     hide() {      this.flag = false;    }  }} </script>

新建一个popBox.js

import Vue from 'vue'import PopBox from './popBox.vue' // Vue.extend返回一个实例创建的构造器,但实例构造器需要进行挂载到页面中let popBox = Vue.extend(PopBox)    popBox.install = (vue, text) => {              // 在body中动态创建一个div元素,之后此div将会替换成整个vue文件的内容        // 此时的popBoxDom通俗讲就是相当于是整个组件对象,通过对象调用属性的方法来进行组件中数据的使用        let popBoxDom = new popBox({            el: document.createElement('div')        })                 // 可以通过$el属性来访问创建的组件实例        document.body.appendChild(popBoxDom.$el)            // 将需要传入的文本内容传给组件实例        popBoxDom.text = text;         // 返回一个promise,进行异步操作,成功时返回,失败时返回        return new Promise((res, rej) => {                 popBoxDom.show = () => {                   res()   //正确时返回的操作                popBoxDom.flag = false;            }             popBoxDom.hide = ()=>{                rej()   //失败时返回的操作                popBoxDom.flag = false;            }        }         vue.prototype.$popBox = popBox        })} // 将逻辑函数进行导出和暴露export default popBox

页面使用

import PopBox from './popBox.js' Vue.use(popBOx);  this.$popBox({      title:'标题',      msg:'内容',      btn:{ ok:'确定', no:'取消'}}).then(()=>{      console.log('ok')}).catch(()=>{      console.log('no')})

其他

import toastCom from "./Toast"; const toast = {};toast.install = vue => { const ToastCon = vue.extend(toastCom); const ins = new ToastCon(); ins.$mount(document.createElement("div")); document.body.appendChild(ins.$el); console.log(ins.toast) vue.prototype.$toast = ins.toast;};   const globalComponent = { install: function(Vue) {   Vue.use(toast); }}; export default globalComponent;

到此,相信大家对“vue怎么使用Vue.extend创建全局toast组件”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue怎么使用Vue.extend创建全局toast组件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue怎么使用Vue.extend创建全局toast组件

本篇内容主要讲解“vue怎么使用Vue.extend创建全局toast组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么使用Vue.extend创建全局toast组件”吧!Vue.ex
2023-07-05

vue使用Vue.extend创建全局toast组件实例

这篇文章主要介绍了vue使用Vue.extend创建全局toast组件实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-06

Vue封装全局toast组件的应用

这篇文章主要介绍“Vue封装全局toast组件的应用”,在日常操作中,相信很多人在Vue封装全局toast组件的应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue封装全局toast组件的应用”的疑惑有所
2023-06-20

vue全局提示插件开发toast怎么使用

本篇内容介绍了“vue全局提示插件开发toast怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!插件插件通常用来为 Vue 添加全局功
2023-07-04

Vue组件Toast显示框怎么用

本篇内容介绍了“Vue组件Toast显示框怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果展示 代码分析div包含icon小图标和文
2023-07-04

Vue组件如何创建使用

这篇文章主要介绍“Vue组件如何创建使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue组件如何创建使用”文章能帮助大家解决问题。一、组件组件是vue的重要的特征之一,可以扩展html的功能,也
2023-07-05

Vue组件之单文件组件怎么创建

这篇“Vue组件之单文件组件怎么创建”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue组件之单文件组件怎么创建”文章吧。一
2023-07-05

Vue中单文件组件怎么创建

本篇内容介绍了“Vue中单文件组件怎么创建”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一,创建单文件组件1.切换到你想要创建该文件的目录下
2023-07-05

怎么深入了解Vue组件的创建和使用

今天就跟大家聊聊有关怎么深入了解Vue组件的创建和使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、什么是组件?组件 (Component) 是 Vue.js 最强大的功能之一。
2023-06-22

vue中怎么使用svg封装全局消息提示组件

本文小编为大家详细介绍“vue中怎么使用svg封装全局消息提示组件”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue中怎么使用svg封装全局消息提示组件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。先看效果图
2023-06-30

java怎么创建和使用组件

在Java中,可以使用Swing或JavaFX来创建和使用组件。下面是一些常见的创建和使用组件的方法:1. 创建组件:- 使用Swing:```javaimport javax.swing.*;// 创建一个按钮JButton button
2023-10-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录