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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)

    像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引用一下,不需要就删除.故观念使然,尽管 Nuget 和 Maven 用得顺溜,但对 NPM 仍不带感,兴许是周边无人带动的稀薄气氛,也或者是没参加过类似的大型活动,于是在自发性上差了许多.再者,我不用 MVVM 模式,领导也不会扣绩效. 为了快速体验 MVVM 模式,我选择了非工程化方式来起步,并选择使用 Vue.js,以及基于它构建的 iView UI 框架. V

  • 浅谈vue的iview列表table render函数设置DOM属性值的方法

    如下所示: { title: '负责人社保照片', key: 'leaderIdNumber', render: (h, params) => { return h('img',{domProps:{ src:params.row.leaderIdNumber }}) } }, 找了好多,终于找到了原因,如果想要让列表返回的是一个img标签,并且设置img的src,这里不能用props,而是要用domProps就ok了. 以上这篇浅谈vue的iview列表table render函数设置DOM属

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

    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="

  • vue+iview 实现可编辑表格的示例代码

    先简单说明一下,这个Demo引入的vue,iview的方式是标签引入的,没有用到webpack之类的构建工具... 毕竟公司还在用angularjs+jq. 这也是我第一次写文章,大家看看思路就行了,要是有大佬指点指点就更好了 话不多说,先来个效果图 我们再看下极为简单的目录结构 IViewEditTable ## vue+iview 实现的可编辑表格 └── index.html ## 首页 └── js └── editTable.js ## 首页JS └── ivew ## iview相关

  • React Native实现进度条弹框的示例代码

    本文介绍了React Native实现进度条弹框,分享给大家 我们在上传或者下载文件时候,希望有一个进度条弹框去提醒用户取当前正在上传或者下载,也允许用去取点击取消上传或者下载. 首先实现进度条. import React, { PureComponent } from 'react'; import { StyleSheet, View, Animated, Easing, } from 'react-native'; class Bar extends PureComponent { con

  • vue.js前端网页弹框异步行为示例分析

    目录 1. 序 2. 找两个弹框组件看看 3. 自己肝一个 3.1. 封装 Promise 3.2. 确定时允许异步等待 3.3. 细节完善 3.4. 改革 1. 序 网页弹框是个很常见的功能,比如需要告知用户消息的时候 (Alert),需要用户进行确认的时候 (Confirm),需要用户补充一点信息的时候 (Prompt) -- 甚至可以弹框让用户填写表单 (Modal Dialog). 弹框之后,开发者需要知道这个弹框是什么时候关闭以便进行接下来的操作. 在比较古老的 UI 组件中,这个事情

  • 用ES6的class模仿Vue写一个双向绑定的示例代码

    本文介绍了用ES6的class模仿Vue写一个双向绑定的示例代码,分享给大家,具体如下: 最终效果如下: 构造器(constructor) 构造一个TinyVue对象,包含基本的el,data,methods class TinyVue{ constructor({el, data, methods}){ this.$data = data this.$el = document.querySelector(el) this.$methods = methods // 初始化 this._com

  • vue.js中toast用法及使用toast弹框的实例代码

    1.首先引入 import { Toast } from 'vant' 写个小列子 绑定一个click事件 2.写事件 在methods写方法 showToast() { this.$toast({ message: "今日签到+3", }) }, 3.效果图如下 一个简单的toast提示成就好了 下面通过实例代码看下vue 中使用 Toast弹框 import { ToastPlugin,ConfirmPlugin,AlertPlugin} from 'vux' Vue.use(To

  • vue移动端写的拖拽功能示例代码

    相关知识点 touchstart 当在屏幕上按下手指时触发 touchmove 当在屏幕上移动手指时触发 touchend 当在屏幕上抬起手指时触发 mousedown mousemove mouseup对应的是PC端的事件 touchcancel 当一些更高级别的事件发生的时候(如电话接入或者弹出信息)会取消当前的touch操作,即触发 touchcancel.一般会在touchcancel时暂停游戏.存档等操作. 效果图 实现步骤html 总结了一下评论,好像发现大家都碰到了滑动的问题.就在

  • Vue+ElementUI实现从后台动态填充下拉框的示例代码

    1.首先编写前端代码,将elementUI中的标签写到.vue界面中.  <el-select       v-model="xxxQuery.xxxid"       placeholder="请在下拉框中选择名称"       maxlength="255"       :disabled="false"       clearable>             <el-option          

  • iview实现select tree树形下拉框的示例代码

    本文介绍了iview实现select tree树形下拉框的示例代码,分享给大家,具体如下: html部分 <Tree :data="treeData" ref="tree" :render="renderContent"></Tree> 数据部分 export const treeData= [ { title: 'parent 1', expand: true, selected: true, value: '1', c

  • idea插件开发之弹出框的示例代码

    前言 IntelliJ平台的用户界面广泛使用弹出窗口,即没有chrome(显式关闭按钮)的半模式窗口,在焦点丢失时自动消失.在插件中使用这些控件可以确保插件和IDE其他部分之间的用户体验一致. 弹出窗口可以选择性地显示标题,也可以移动和调整大小(并支持记住它们的大小),并且可以嵌套(当选择一个项目时显示另一个弹出窗口). 一.JBPopupFactory JBPopupFactory 是idea 提供给用户自定义窗口的接口,比较常见的方法如下 createComponentPopupBuilde

随机推荐