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用户自定义类的类名称的代码
Mar 08 Javascript
User Scripts: Video Download by User Scripts
May 14 Javascript
一次失败的jQuery优化尝试小结
Feb 06 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
Aug 10 Javascript
关于JavaScript中name的意义冲突示例介绍
May 29 Javascript
jquery操作checked属性以及disabled属性的多种方法
Jun 20 Javascript
jquery获得同源iframe内body下标签的值的方法
Sep 25 Javascript
vue.js学习之UI组件开发教程
Jul 03 Javascript
vue根据进入的路由进行原路返回的方法
Sep 26 Javascript
layui 富文本编辑器和textarea值的相互传递方法
Sep 18 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
Apr 28 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
Jun 19 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 Google的translate API代码
2008/12/10 PHP
php 图像函数大举例(非原创)
2009/06/20 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
深入理解Python变量与常量
2016/06/02 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
python调用摄像头的示例代码
2020/09/28 Python
Python使用Pygame绘制时钟
2020/11/29 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
高中三年学习生活的自我评价
2013/10/10 职场文书
高中自我鉴定范文
2013/11/03 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
关于旷工的检讨书
2014/02/02 职场文书
项目建议书模板
2014/05/12 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
2015年教师节广播稿
2015/08/19 职场文书
会计主管竞聘书
2015/09/15 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
nginx请求限制配置方法
2021/07/09 Servers