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 相关文章推荐
JS小功能(setInterval实现图片效果显示时间)实例代码
Nov 28 Javascript
提高jQuery性能优化的技巧
Aug 03 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
Dec 04 Javascript
jquery.validate 自定义验证方法及validate相关参数
Jan 18 Javascript
详解Jquery实现ready和bind事件
Apr 14 Javascript
基于javascript数组实现图片轮播
May 02 Javascript
jQuery验证插件validate使用方法详解
Sep 13 Javascript
详解ES6 系列之异步处理实战
Oct 26 Javascript
Vue表单输入绑定的示例代码
Nov 01 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
Jan 19 Javascript
JavaScript中AOP的实现与应用
May 06 Javascript
vue使用element-ui按需引入
May 20 Vue.js
关于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
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
javascript继承之为什么要继承
2012/11/10 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
Python学习资料
2007/02/08 Python
Python使用新浪微博API发送微博的例子
2014/04/10 Python
Python实现远程调用MetaSploit的方法
2014/08/22 Python
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
大学生未来职业生涯规划书
2014/02/15 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
法制宣传口号
2014/06/16 职场文书
客户答谢会致辞
2015/01/20 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
pytorch中的model=model.to(device)使用说明
2021/05/24 Python