最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vue重构项目之实战技巧篇

    正文概述 掘金(凉城a)   2021-04-13   469

    实战技巧(后续持续补充)

    项目中的遇到的问题

    问题

    1. 两个数组A=[],B=[]每个数组长度不确定A内的每个元素需要向B内的每个元素发送一次请求每个请求必须等待上个请求执行完毕后再执行
    2. 最后执行完毕提示操作成功
    3. 第一个请求使用输入的评论之后的使用随机生成的评论

    Vue重构项目之实战技巧篇

    思考

    处理同步/异步问题async/await肯定是首选没毛病

    双重for循环应该可行?promise.all/promise.race应该可行?还是async/await

    想起来可能简单,你可以动手试试能否给出你想象中的答案!!!

    实践

    如果是使用jq的$.ajax那么就很容易了 $.ajax有个配置项叫做async可以理解为请求锁

    • async 默认是 true,即为异步方式,.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发.ajax里的success方法,这时候执行的是两个线程。

    • async 设置为 false,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。

    var temp;
    $.ajax({
      async: false,
      type : "post",
      url : defaultpostdata.url,
      datatype : 'json',
      success : function(data) {
         temp=data;
      }
    });
    alert(temp);
    

    这个ajax请求为同步请求,在没有返回值之前,alert(temp)是不会执行的。

    如果async设置为:true,则不会等待ajax请求返回的结果,会直接执行ajax后面的语句

    然而这次重构我抛弃了jq,必须另寻出路。

    // 比方说A=[{userId:a1},{userId:a2},{userId:a3}] B=[{id:b1},{id:b2},{id:b3}]
    // A里面的每个元素需要逐个像B里面的元素发送请求
    // this.dialogOtherData.data相当于A   this.choseList相当于B
    var comment = [
      '拍的真好看', '666', '哪里人', '呵呵', '私聊我', '有人啊', '有的', '找个人一起啊', '来了老弟!'...
    ]
    async handelLoop() {
      var total = this.dialogOtherData.data.length * this.choseList.length
      for (let i = 0; i < this.dialogOtherData.data.length; i++) {
        var commentData = {}
        commentData.userId = this.dialogOtherData.data[i].userId
        await this.getData(commentData, i, total)
      }
    }
    async getData(commentData, i, total) {
      var random = Math.random()
      for (let j = 0; j < this.choseList.length; j++) {
        if (this.dialogOtherData.title === '评论') {
          commentData.dynamicId = this.choseList[j].id
          commentData.type = 1
          if (i === 0) {
            commentData.content = this.inputVal
          } else {
            var two = j * Math.random().toString().substr(3, 1)
            commentData.content = comment[+random.toString().substr(2, 2) + (+two)]
          }
          await dynamicOperation(commentData).then(res => {
            if (res.succeed) {
              if ((i + 1) * (j + 1) === total) {
                this.close()
                this.$message.success('操作成功')
              }
            }
          })
        }
      }
    }
    

    Vue里为什么axios无法请求三方API

    request.js里不要这么写axios.defaults.withCredentials = true // 让ajax携带cookie 其他接口需要就配置在service里,不要全局默认就Ok了 不需要配置代理什么的就能搞定

    const service = axios.create({
      baseURL: process.env.VUE_APP_BASE_API2, // url = base url + request url
      withCredentials: true, // send cookies when cross-domain requests
      timeout: 5000 // request timeout
    })
    

    判断两数组是否相同

    // 判断数组是否相同
    scalarArrayEquals(array1, array2) {
      return array1.length === array2.length && array1.every(function(v, i) { return v === array2[i] })
    }
    

    element表格提示显示过长问题

    在公共样式里面设置index.css一下

    // 表格过长显示问题
    .el-tooltip__popper {
      max-width: 400px;
      line-height: 180%;
    }
    

    省心小插件

    1.element-china-area-data

    简介

    element-china-area-data地址 几行代码实现省市区三级联动

    Vue重构项目之实战技巧篇

    安装

    npm install element-china-area-data -S

    使用

    import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode } from 'element-china-area-data'
    

    服务端用法:

    const { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode } = require('element-china-area-data/dist/app.commonjs')
    
    • provinceAndCityData是省市二级联动数据(不带“全部”选项)
    • regionData是省市区三级联动数据(不带“全部”选项)
    • provinceAndCityDataPlus是省市区三级联动数据(带“全部”选项)
    • regionDataPlus是省市区三级联动数据(带“全部”选项)
    • "全部"选项绑定的value是空字符串""
    • CodeToText是个大对象,属性是区域码,属性值是汉字 用法例如:CodeToText['110000']输出北京市
    • TextToCode是个大对象,属性是汉字,属性值是区域码 用法例如:TextToCode['北京市'].code输出110000,TextToCode['北京市']['市辖区'].code输出110100,TextToCode['北京市']['市辖区']['朝阳区'].code输出110105
    <template>
      <div id="app">
        <el-cascader
          size="large"
          :options="options"
          v-model="selectedOptions"
          @change="handleChange">
        </el-cascader>
      </div>
    </template>
     
    <script>
      import { regionData } from 'element-china-area-data'
      export default {
        data () {
          return {
            options: regionData,
            selectedOptions: []
          }
        },
     
        methods: {
          handleChange (value) {
            console.log(value)
          }
        }
      }
    </script>
    

    2.viewerjs

    简介

    git地址一款功能强大配置简单的图片预览插件

    Vue重构项目之实战技巧篇

    安装

    npm install v-viewer --save

    使用

    • main.js内引用并注册调用
    //main.js
    import Viewer from 'v-viewer'
    import 'viewerjs/dist/viewer.css'
    
    Vue.use(Viewer);
    //zIndex默认是2015
    Viewer.setDefaults({
      Options: { 'zIndex': 2099,"inline": true, "button": true, "navbar": true, "title": true, "toolbar": true, "tooltip": true, "movable": true, "zoomable": true, "rotatable": true, "scalable": true, "transition": true, "fullscreen": true, "keyboard": true, "url": "data-source" }
    });
    
    • 代码中使用xxx.vue
    <template>
        <div class="content">
            <h1>Viewer图片预览插件</h1>
            <viewer :images="imgs">
                <img v-for="src in imgs" :src="src.url" :key="src.title">
            </viewer>
       </div>
    </template>
    <script>
    export default {
      data () {
        return {
          imgs: [
           {
              url: 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=85690711,3884201894&fm=27&gp=0.jpg',
              title: '图片1'
            },
            {
              url: 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3564877025,796183547&fm=27&gp=0.jpg',
              title: '图片2'
            }
          ]
        }
      },
    }
    </script>
    

    Vue重构项目之实战技巧篇


    起源地下载网 » Vue重构项目之实战技巧篇

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元