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中的slice()方法使用详解
Jun 06 Javascript
JS表格组件神器bootstrap table详解(基础版)
Dec 08 Javascript
详解AngularJS中自定义过滤器
Dec 28 Javascript
封装好的javascript前端分页插件pagination
Jan 04 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
Apr 01 Javascript
基于javascript制作微博发布栏效果
Apr 04 Javascript
Bootstrap每天必学之响应式导航、轮播图
Apr 25 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
Oct 09 Javascript
H5手机端多文件上传预览插件
Apr 21 Javascript
jQuery替换节点元素的操作方法
Mar 18 jQuery
详解VUE里子组件如何获取父组件动态变化的值
Dec 26 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
Sep 11 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学习笔记 数组遍历实现代码
2011/06/09 PHP
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
php自动加载机制的深入分析
2013/06/08 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
JavaScript 继承详解(四)
2009/07/13 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
pyside写ui界面入门示例
2014/01/22 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
Python中django学习心得
2017/12/06 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
Python小程序之在图片上加入数字的代码
2019/11/26 Python
详解python如何引用包package
2020/06/07 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
日本订房网站,预订日本星级酒店/温泉旅馆:Relux(支持中文)
2020/01/03 全球购物
网络工程师的自我评价
2013/10/02 职场文书
大学生活学习的自我评价
2013/12/03 职场文书
小学生感恩演讲稿
2014/04/25 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
感谢信怎么写
2015/01/21 职场文书
长城英文导游词
2015/01/30 职场文书
如何用PHP实现多线程编程
2021/05/26 PHP