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数组的遍历方式for循环与for...in
Jul 31 Javascript
原生javascript实现简单的datagrid数据表格
Jan 02 Javascript
jQuery中队列queue()函数的实例教程
May 03 Javascript
jQuery插件开发汇总
May 15 Javascript
AngularJS ng-bind 指令简单实现
Jul 30 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
Oct 09 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
Nov 09 Javascript
JS实现520 表白简单代码
May 21 Javascript
详解vue.js移动端配置flexible.js及注意事项
Apr 10 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
Aug 26 Javascript
Vue数字输入框组件使用方法详解
Feb 10 Javascript
Javascript中window.name属性详解
Nov 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 UTF8 文件的签名问题
2009/10/30 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
从零学Python之入门(二)基本数据类型
2014/05/25 Python
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
基于Django filter中用contains和icontains的区别(详解)
2017/12/12 Python
单链表反转python实现代码示例
2018/02/08 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
构建高效的python requests长连接池详解
2020/05/02 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
什么是GWT的Module
2013/01/20 面试题
机械工程师求职自我评价
2013/09/23 职场文书
最新创业融资计划书
2014/01/19 职场文书
总经理任命书范本
2014/06/05 职场文书
2016年寒假家长评语
2015/10/10 职场文书
python文件目录操作之os模块
2021/05/08 Python
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers