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 相关文章推荐
删除重复数据的算法
Nov 23 Javascript
JavaScript 字符编码规则
May 04 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
Jul 14 Javascript
关于javascript function对象那些迷惑分析
Oct 24 Javascript
Jquery中基本选择器用法实例详解
May 18 Javascript
jQuery解决浏览器兼容性问题案例分析
Apr 15 Javascript
jQuery右下角悬浮广告实例
Oct 17 Javascript
输入框点击时边框变色效果的实现方法
Dec 26 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
Mar 29 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
Apr 04 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 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
php基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
jQuery Ajax使用 全解析
2010/12/15 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
vue封装swiper代码实例解析
2019/10/08 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
学习python (2)
2006/10/31 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
numpy.random模块用法总结
2019/05/27 Python
给我一面国旗 python帮你实现
2019/09/30 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
关于Keras Dense层整理
2020/05/21 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
python Tornado框架的使用示例
2020/10/19 Python
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
文秘专业个人求职信
2013/12/22 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
入党政审材料范文
2014/12/24 职场文书
毕业论文致谢信
2015/05/14 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle