zoukankan      html  css  js  c++  java
  • 1.关于数据for循环不要用index作为key,2.面二次刷新404问题(空白) 的探讨 3. vue图片上传

    问题一:for循环建议不要直接用index作为key

      效果:页面删除之后不刷新,页面有两个图元,将前面画的图元删除掉,下拉找到的还是原来的那个图元,下拉数据没有“刷新”,

      我们首先来讨论一下页面vue数据绑定的机制

      原因:图元删除的时候,页面是有两个图元,一个先画一个后画,如果我删除后画的那个,正常,但是如果我删除的是第一个图元,如果页面正常走,看不出效果,但是如果页面在断点的情况下看,就能看出了问题

    页面流程实际是先将后画的图元删掉了,然后将后一个图元的数据放到了前面一个数据中将dom渲染,

    a图元对应index为1的数据   b图元对应index为2的数据

    刚刚页面的问题,是因为for循环的时候用了index作为索引,删除数据1的时候,来到页面的时候并没有删除掉对应dom也就是index为1 而是把index为2的这个图元 删除掉了,把数据1放进了dom1的这个图元里面 渲染了

    而在代码实现中,把业务代码写进了destroy里面,destroy他是判断页面dom销毁的时候触发  因为销毁的dom 因为index的问题,删除1的数据销毁了图元2,,取到的数据也是不对的了

    解决办法:

      1、不直接用index作为索引

      2、如果用了,操作数据时候不要在destroy里面进行

    问题二:页面刷新空白

    报表页面从菜单进,可以正常打开报表页面,但是当页面一刷新了,页面就报错了

    whitelabel Error Page

    当时一直没有找到解决办法 后台觉得不是他的问题,前端也说不是前端问题,因为毕竟第一次能出来,

    原因:

      因为页面url地址的原因,url路由链接写成了report   而前端代码在vue.config.js里面用了配置服务器  proxy   如果有report字段的就进行地址重写,因为碰到了这个report  进行了重定向跳到了一个位置的地址里面去了,所以就报错了

    问题三:图片上传

    1、头部信息一直带不上 上传不了,主要是因为请求头部被污染

    解决办法,新建了axios,单独用做上传用

    /**
     * 封装上传图片upload的方法
     * @param url
     * @param data
     * @returns {Promise}
     */
    export function upload(url, data = {}) {
        let instance = axios.create();
        let Authorization = cookies.get('access_token') ?  "Bearer " + cookies.get('access_token')  : ''
        instance.defaults.headers.common['Authorization'] = Authorization
        return new Promise((resolve, reject) => {
            instance.post(url, data)
                .then(response => {
                    if (response.data) resolve(response.data);
                }, err => {
                    reject(err)
                })
        })
    }

    页面代码:

    <template>
        <div class="param-pannel">
            <common-prm/>
            <border-prm myStyle="style" />
            <collapse-item title="图片" :isShow='true'>
                <div class="param-gap">
                    <label class="left" for="">路径&nbsp;:</label>
                    <div class="right">
                        <input type="file" name="file" ref="input" enctype="multipart/form-data" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg" multiple="multiple" @change="getFile" class="data-value" />
                    </div>
                </div>
            </collapse-item>
        </div>
    </template>
    <script>
    import mixins from '../paramMixins.js'
    import Api from '@frameworks/conf/api'
    export default {
        name: 'ImgParam',
        mixins: [mixins],
        methods: {
            getFile(e) {
                //验证
                if (e.target.files[0].size >= 10048576) {
                    this.$_c.msg("上传图片大小不得超过10M", { type: 'error' })
                    return false;
                }
                // 预览图片用
                // var reader = new FileReader();
                // let _this = this
                // reader.onload = (function(file) {
                //     return function(e) {
                //         var datainfo = this.result
                //         console.log(datainfo)
                //         _this.params.images = datainfo
                //         _this.updateData()
    
                //     }
                // })(e.target.files[0]);
                // reader.readAsDataURL(e.target.fes[0]);
                //上传
                this.upload(e.target.files[0])
            },
            //调用上传图片的接口上传
            upload(file) {
                var formData = new FormData()
                formData.append('file', file)
                /*axios请求方式 */
                this.$ajax.upload(Api.uploadFile, formData).then((res) => {
                    if (res.code === 200) {
                        this.$_c.msg(res.message)
                        //console.log(res.data.url)//将成功返回的url值设置回去
                        //console.log(this.params)
                        this.params.images = res.data.url  //如果想模拟就把下面两行去掉
                        this.updateData()
                    } else {
                        this.$_c.msg(res.message, { type: 'error' })
                    }
                }).catch(error => {
                    this.$_c.msg("服务器报错", { type: 'error' })
                })
                //axios封装的post请求(不成功)
                /*this.$ajax.post(Api.uploadFile, formData).then(function(res) {
                    alert(123)
                }, function() {
                    this.promptText = '请求失败'
                    this.$refs.prompt.show()
                })*/
                /*原生请求方式(成功) */
                // let xhr = new XMLHttpRequest();  // XMLHttpRequest 对象
                // xhr.open("post", "http://localhost:8082/api/files/api/upload/uploadFile", true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
                // //xhr.setRequestHeader('content-type', 'multipart/form-data')
                // //xhr.setRequestHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8')
                // xhr.send(formData); //开始上传,发送form数据
                // xhr.onreadystatechange = function () {
                //     var data = xhr.responseText;
                //     console.log(data);
                // }
            }
        }
    }
    </script>
    <style scoped lang="scss">
    .param-pannel input,
    .param-pannel select {
        border: 1px solid #ddd;
        width: 100%
    }
    .param-pannel>div {
        padding: 5px 0;
    }
    </style>

    效果图 (支持各种图片上传   gif的如果不行就是后台问题,请求头问题)

  • 相关阅读:
    Proc、宿主变量、指示变量、数组变量、通信区sqlca,oraca ---(day07)
    Cursor、Exception、Procedure、Function、Package、Trigger(day06)
    大话设计模式C++版——建造者模式
    大话设计模式C++版——观察者模式
    大话设计模式C++版——代理模式
    大话设计模式C++版——工厂模式在COM中的典型应用
    大话设计模式C++版——抽象工厂模式
    大话设计模式C++版——工厂方法模式
    exe文件无法打开
    数据驱动编程之表驱动法
  • 原文地址:https://www.cnblogs.com/pengfei25/p/12939828.html
Copyright © 2011-2022 走看看