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 相关文章推荐
javascript复制对象使用说明
Jun 28 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
Dec 21 Javascript
JavaScript实现的圆形浮动标签云效果实例
Aug 06 Javascript
JavaScript模拟鼠标右键菜单效果
Dec 08 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
May 13 Javascript
AngularJS表单和输入验证实例
Nov 02 Javascript
纯js仿淘宝京东商品放大镜功能
Mar 02 Javascript
vue.js的提示组件
Mar 02 Javascript
jQuery插件实现弹性运动完整示例
Jul 07 jQuery
element el-input directive数字进行控制
Oct 11 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
Dec 06 Javascript
JS中的const命令你真懂它吗
Mar 08 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
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
JavaScript使用localStorage存储数据
2019/09/25 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
行政助理岗位职责
2013/11/10 职场文书
职工运动会感言
2014/02/07 职场文书
村庄绿化方案
2014/05/07 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python