搜索
您的当前位置:首页vue+iview写个弹框的示例代码

vue+iview写个弹框的示例代码

时间:2020-11-27 来源:智榕旅游

iView 是一套基于Vue.js的开源UI组件库,主要服务于PC界面的中后台产品。

1、iView的特性

1) 高质量、功能丰富
2) 友好的API ,自由灵活地使用空间
3) 细致、漂亮的 UI
4) 事无巨细的文档
5) 可自定义主题

2、iView的安装:

1) 使用npm:

npm install --save iview 

2) CDN引入:

<link rel="stylesheet" href="css/iview.css" rel="external nofollow" > 
<script src="js/iview.min.js"></script> 

由于公司项目需要,所以目前捣鼓了vue+iview搭建了一个项目,用的环境都是1.0版本,在使用iview弹框中,由于需要先进行弹框中表单的验证,验证通过才调用后台接口,但是呢,iview弹框中的确定按钮点击一下弹框就消失了,怎么办,要实现效果,各种翻看资料,最终解决办法如下:

<template> 
 <!--取消订单弹框和老板批准弹框--> 
 <Modal 
 :visible.sync="show" 
 title="提示" 
 :loading="loading" 
 @on-ok="asyncOK"> 
 <Row> 
 <i-col span="3"></i-col> 
 <i-col span="1" style="color:red;margin-top:7px;font-weight: bold">*</i-col> 
 <i-col span="2" style="margin-top:5px;">授权码</i-col> 
 <i-col span="6"> 
 <input class="ivu-input errorInput" type="number" v-model="code" placeholder="请输入" @blur="codeBlur"> 
 <div class="fade-transition ivu-form-item-error-tip error" style="display:none;position: static">验证码错误</div> 
 </i-col> 
 <i-col span="3" style="margin-left:5px;"> 
 <i-button type="primary" :loading="loadingBtn" @click="toLoading"> 
 <span v-if="!loadingBtn">{{btnText}}</span> 
 <span v-else>{{btnText}}</span> 
 </i-button> 
 </i-col> 
 </Row> 
 </Modal> 
</template> 
<script type="text/javascript"> 
import { 
 orderService 
} from 'jo' 
 export default { 
 props:["show"], 
 data(){ 
 return { 
 loading:true, 
 loadingBtn:false,//点击申请取消按钮后loading 
 btnText:'申请取消订单', 
 code:"",//验证码 
 clearTime:"",//定时器 
 countDownIndex:60,//60秒倒计时 
 } 
 }, 
 methods:{ 
 codeBlur(){ 
 if(this.code == ""){ 
 $(".errorInput").css("border","1px solid red") 
 $(".error").css("display","block") 
 }else{ 
 $(".errorInput").css("border","1px solid #d7dde4") 
 $(".error").css("display","none") 
 } 
 }, 
 toLoading(){ 
 //调用发送验证码接口 
 // let operName = window.sessionStorage.getItem("userName") 
 // accountService.recommenderGetCode(operName,this.selectDelteOne.recommender,1) 
 this.countDown() 
 
 }, 
 countDown(){ 
 //倒计时 
 var that = this; 
 that.loadingBtn = true 
 that.btnText = that.countDownIndex+"秒" 
 that.countDownIndex--; 
 that.clearTime = setInterval(function(){ 
 console.log(that.countDownIndex) 
 if(that.countDownIndex == 0){ 
 that.countDownIndex = 60 
 that.btnText = "发送" 
 that.loadingBtn = false 
 window.clearTimeout(that.clearTime) 
 return false 
 } 
 that.btnText = that.countDownIndex+"秒" 
 that.countDownIndex--; 
 },1000) 
 // } 
 }, 
 asyncOK(){ 
 //提交 
 if(this.code == ""){ 
 this.show = true 
 console.log('sdasda'+this.show) 
 $(".errorInput").css("border","1px solid red") 
 $(".error").css("display","block") 
 this.loading = false 
 this.$nextTick(() => { this.loading = true;}); 
 return 
 } 
 this.$nextTick(() => {this.loading = true; }); 
 // let operId = window.sessionStorage.getItem("crmUserId") 
 // let operName = window.sessionStorage.getItem("userName") 
 // if(this.isApply){ 
 // orderService.sendSingleUpdate03(this.data, 3, operName, operId, this.code).then(res => this.updateList(res.message)) 
 // }else{ 
 // orderService.sendSingleUpdate03(this.data, 2, operName, operId, this.code).then(res => this.updateList(res.message)) 
 // } 
 } 
 } 
 } 
</script> 

大概思路就是先命名一个变量loading,这里必须为true,然后在点击弹框的提交按钮的时候先把loading设置为false,然后必须加上

this.$nextTick(() => { this.loading = true;});就能实现效果啦,具体实现原理,这坑遇到了,就先记录下来  

传送门-->https://github.com/iview/iview/issues/597#issuecomment-292422473 

Top