vue封装可复用组件confirm,并绑定在vue原型上的示例


Posted in Javascript onOctober 31, 2019

如下所示:

vue封装可复用组件confirm,并绑定在vue原型上的示例

首先我们需要创建 confirm.vue , confirm.js这两个文件,一个实现dom结构,一个实现相关逻辑

confirm.vue

<template>
 <div class="confirm" v-if="isShow">
  <div class="con_box" >
   <div class="context">
    <h6>{{text.type}}</h6>
    <p>{{text.msg}}</p>
    <div class="btn">
     <span @click="close()" v-if="text.btn.no">{{text.btn.no}}</span>
     <span @click="ok()" v-if="text.btn.ok">{{text.btn.ok}}</span>
    </div>
   </div>
  </div>
 </div>
</template>
<script>
export default {
 data(){
  return{
   isShow:true,
   text:{
    type:'提示',    
    msg:'确定删除此条信息?',
    btn:{
     ok:'确定',
     no:'取消'
    },
   }
  }
 },
 methods:{
  close(){
   console.log('关闭');
  },
  ok(){
   console.log('确定')
  }
 }
}
</script>
<style scoped>
.confirm{background-color:rgba(0, 0, 0, 0.6);width: 100%;height: 100%; position: fixed;top: 0;}
.con_box{width: 75%;height: 22%;background-color: white;position: absolute;top: 0;bottom: 0;left: 0;right: 0;margin: auto;border-radius: 5px;}
.context{padding: 10px;}
.context h6{font-size: 24px;padding: 15px;}
.context p{font-size: 20px;padding: 35px 15px;text-overflow: ellipsis;overflow: hidden;white-space: nowrap;}
.btn{padding: 15px;text-align: right;}
.btn span{padding: 10px 35px; color: white;border-radius: 5px;}
.btn span:nth-child(1){background-color: #f1f1f1;color: rgb(106, 223, 223);}
.btn span:nth-child(2){background-color: rgb(106, 223, 223);}
</style>

confirm.js

import Vue from 'vue';
import confirm from './confirm.vue';

let confirmConstructor = Vue.extend(confirm);

let theConfirm = function (text) {
 return new Promise((res, rej) => { //promise封装,ok执行resolve,no执行rejectlet
  let confirmDom = new confirmConstructor({ 
  el: document.createElement('div')
  })
  document.body.appendChild(confirmDom.$el); //new一个对象,然后插入body里面

  confirmDom.text = text; //为了使confirm的扩展性更强,这个采用对象的方式传入,所有的字段都可以根据需求自定义
  confirmDom.ok = function () {
  res()
  confirmDom.isShow = false
  }
  confirmDom.close = function () {
  rej()
  confirmDom.isShow = false
  }

 })
 }

 export default theConfirm; 
 
 //暴露出去,别忘记挂载到vue的原型上 
 // => 在main.js里面先引入 import theConfirm from './components/confirm/confirm.js'
 // => 再挂载 Vue.prototype.$confirm = theConfirm;
 //在需要的地方直接用以下方法调用即可:
 // this.$confirm({
 //  type:'提示',
 //  msg:'是否删除这条信息?',
 //  btn:{
 //   ok:'yes',
 //   no:'no'
 //  }
 // }).then(() => {
 //  console.log('ok')
 // })
 // .catch(() => {
 //  console.log('no')
 // })

main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

//这里就是对组件的绑定
import theConfirm from './components/confirm/confirm.js'
Vue.prototype.$confirm = theConfirm;

Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
 el: '#app',
 router,
 components: { App },
 template: '<App/>'
})

helloworld.vue

<template>
 <div class="hello">
  <span @click="handMe()">点击一下</span>
 </div>
</template>

<script>
export default {
 name: 'HelloWorld',
 data () {
 return {
  
 }
 },
 methods:{
 handMe(){
 this.$confirm({
 type:'提示',
 msg:'是否删除这条信息?',
 btn:{
  ok:'yes',
  no:'no'
 }
 }).then(() => {
 console.log('ok')
 })
 .catch(() => {
 console.log('no')
 })
 }
 }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
span{font-size: 24px;}
</style>

以上这篇vue封装可复用组件confirm,并绑定在vue原型上的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jQuery的消息提示插件 DivAlert之旅(二)
Apr 01 Javascript
使用JavaScript开发IE浏览器本地插件实例
Feb 18 Javascript
尝试动手制作javascript放大镜效果
Dec 25 Javascript
果断收藏9个Javascript代码高亮脚本
Jan 06 Javascript
学习vue.js中class与style绑定
Dec 03 Javascript
mui 打开新窗口的方式总结及注意事项
Aug 20 Javascript
微信小程序中post方法与get方法的封装
Sep 26 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
在HTML文档中嵌入JavaScript的四种方法
May 07 Javascript
webpack4 SplitChunks实现代码分隔详解
May 23 Javascript
vue(2.x,3.0)配置跨域代理
Nov 27 Javascript
在vue中使用echarts(折线图的demo,markline用法)
Jul 20 Javascript
关于vue表单提交防双/多击的例子
Oct 31 #Javascript
Vuex的实战使用详解
Oct 31 #Javascript
如何在Vue中抽离接口配置文件
Oct 31 #Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
Oct 30 #Javascript
基于Vue中使用节流Lodash throttle详解
Oct 30 #Javascript
Vue最新防抖方案(必看篇)
Oct 30 #Javascript
vue输入节流,避免实时请求接口的实例代码
Oct 30 #Javascript
You might like
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
一个很不错的PHP翻页类
2009/06/01 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
使用jQuery操作DOM的方法小结
2017/02/27 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
管道维修工岗位职责
2013/12/27 职场文书
大学军训感言300字
2014/03/09 职场文书
运动会标语
2014/06/21 职场文书
二人合伙经营协议书
2014/09/13 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
实习科室评语
2015/01/04 职场文书
建国大业观后感600字
2015/06/01 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
解析Java异步之call future
2021/06/14 Java/Android