zoukankan      html  css  js  c++  java
  • vue搭配antD-Vue开发项目(一)

    安装antd-vue并按需加载(详见 https://www.antdv.com/docs/vue/use-with-vue-cli-cn/ )

    1、yarn add ant-design-vue
    2、yarn add babel-plugin-import
    3、babel.config.js文件
    module.exports = {
      presets: ["@vue/app"],
    +  plugins: [
    +    [
    +      "import",
    +      { libraryName: "ant-design-vue", libraryDirectory: "es", style: "css"}  //注意官网这里是style:true,这可能会导致报错。建议使用style:"css"
    +    ]
    +  ]
    };
    4、src/main.js
    import {Button,Switch} from 'ant-design-vue'
    Vue.use(Button).use(Switch)
    5、使用
    <a-button type="primary">哈哈哈</a-button>
    <a-switch defaultChecked />
    

    若不想按需加载antd-vue,想一次性全部引入

    以上第3步:
    将:{ libraryName: "ant-design-vue", libraryDirectory: "es", style: "css"}
    改为:{ libraryName: "Antd", libraryDirectory: "es", style: "css"}  //提醒:这里style:"css"可改为style:true且不会报错,这样改后会加载包里的less文件而非css文件。不改也没影响
    
    以上第4步:全部改为
    import Antd from 'ant-design-vue';
    import 'ant-design-vue/dist/antd.css';
    Vue.use(Antd);
    
    然后重启项目即可,请务必重启项目。
    
    

    antd表格的使用(包括自定义表格列,表格分页,vue中的对象格式与react的不同)

    <template>
    <a-table 
        :columns="columns"    //2、绑定columns,提醒:columns不仅要自定义,而且之后还需要在data里注册
        :dataSource="personList" 
        bordered 
        :rowKey="record=>record.pid"   //4、表格的每一列必须有一个key值
        :pagination="false"   //7、不使用表格的分页,分页设置建议单独用分页组件,提高灵活性
    >
        <div slot="pimg" slot-scope="text,record">   //6、通过slot='pimg'绑定。通过slot-scope="text,record"可以动态获取数据给自定义的标签,但前提是必须在columns里配置了scopedSlots
            <img :src="record.pimg"/>
            <a-button @click="bigImg(record.pimg)">查看大图</a-button>
        </div>
        <div slot="operations" slot-scope="text,record">
            <a-button @click="personEdit(record.pid)">编辑</a-button>
            <a-popconfirm :title='`确定删除人物"${record.pname}"的信息?`' okText="确定" cancelText="取消" @confirm="deletePerson(record.pid)">
                <a-button>删除</a-button>
            </a-popconfirm>            
        </div>
    </a-table>
     <div style="margin-top:20px;textAlign:right">  //单独使用分页组件
        <a-pagination 
            v-model="pagination.page" 
            :pageSize="pagination.pageSize" 
            :total="pagination.total" 
            @change="pageChange"  
        />
    </div>
    </template>
    
    <script>
    const columns = [   //1、定义表格Header数据columns
        {
            title: '姓名',
            dataIndex: 'pname',  //此处命名有讲究,要与渲染的数组里的属性名一致(如personList里是pname,这里就要用pname,不可用cname,name等)
            key:'pname',
        },
        {
            title: '图片',
            dataIndex: 'pimg',
            key:'pimg',
            scopedSlots:{customRender:'pimg'},  //5、这里设置了scopedSlots:{customRender:'pimg'}之后,表格部分即可通过slot='pimg'绑定,然后去自定义标签及样式。并可通过sloct-scope获取动态数据
        },
        {
            title:'操作',
            dataIndex:'operations',
            key:'operations',
            scopedSlots:{customRender:'operations'},   
        }
    ];
    
    export default {
        name:'Demo',
        data(){
            return{
                personList:[],   //人物列表数据
                columns,   //3、这里必须注册columns
                pagination:{   //9、分页配置(这是一个对象格式的数据)
                    page:1,
                    pageSize:10,
                    total:10,  //这里total随便设一个大于0的数即可,后续在接口里会重新赋值
                }
            }
        }, 
        created(){
            //进入此页面后,获取上次记录的分页,从而获取上次记录的分页的数据
            if(sessionStorage.getItem('personPage')){
                this.pagination.page=JSON.parse(sessionStorage.getItem('personPage'))
            }
            this.getPersonList()
        }
        methods:{
            //初始化时获取列表数据
            getPersonList(){
                let params={
                    page:this.pagination.page,
                    pagesize:this.pagination.pageSize
                }
                this.$axios.get(`${common.base}/admin/getPersonList`,{params}).then(res=>{
                    if(res.data.code==200){
                        if(res.data.data.list){
                            this.personList=res.data.data.list
                            this.pagination.total=res.data.data.allsize
                        }
                    }else if(res.data.code==401){
                        this.$message.warning("登录超时,请重新登录!")
                        this.$router.push({name:'Login'})
                    }
                }).catch(err=>{})
            },
            //翻页时执行此函数
            pageChange(page,pageSize){   //10、分页函数
                sessionStorage.setItem('personPage',page)  //将当前分页存进session,以便在下次再进入此表格时自动回到当前分页
                let params={
                    page:page,
                    pagesize:pageSize
                }
                this.$axios.get(`${common.base}/admin/getPersonList`,{params}).then(res=>{
                    if(res.data.code==200){
                        if(res.data.data.list){
                            this.personList=res.data.data.list
                        }
                    }
                }).catch(err=>{})
            },
            //删除人物
            deletePerson(pid){
                this.$axios.post(`${common.base}/delPerson?pid=${pid}`).then(res=>{
                    if(res.data.code==200){
                        this.$message.success(`人物 ${pname} 信息删除成功!`)
    
                        //判断若列表数据只有一条且当前页不是第一页,则执行page-1,已达到当前分页最后一条数据被删除后,自动跳转至上一分页的效果
                        if(this.personList.length==1&&this.pagination.page>1){
                            this.pagination.page-=1
                            sessionStorage.setItem('personPage',this.pagination.page)  //将当前分页存进session,以便在下次再进入此表格时自动回到当前分页
                        }
    
                        this.getPersonList()   //删除成功后调用此函数获取人物列表信息
                    }
                }).catch(err=>{})
            },
        }      
    }
    </script>
    vue中对象方式和react的不同:vue中 :pagination="{page:1,pageSize:10,total:0}"   react中 pagination={{page:1,pageSize:10,total:0}}  区别:vue中需要v-bind绑定,且包裹方式是""。
    

    解决浏览器缓存导致异步请求后页面不更新的问题

    一般在请求静态资源的时候,浏览器检测不是新数据的话,则会从缓存中读取而不会去进行更新,从而导致后台提交数据后前台不更新的问题。
    解决方法1:ctrl+shift+delete呼出浏览器缓存选项,清除缓存即可。但这样的操作对用户不友好,不推荐
    解决方法2:控制台中Network里选中Disable cache使浏览器不保存缓存,仅适合开发人员用。
    解决方法3:在请求接口的时候带上随机数或者时间戳即可(推荐使用)
    getContent(content){
        this.$axios.get(`${common.base}/getDemoList?t=${Math.random()}`).then(res=>{   //添加随机数 `t=${Math.random()}` 或 时间戳 `t=${new Date().getTime()}`
            this.demoList=res.data.list
        }).catch(err=>{})
    },
    
    

    router路由在新窗口打开页面

    goIndex(){
        let goIndex=this.$router.resolve({name:'Index'})   //这里要用resolve方式。 push,go方式无效
        window.open(goIndex.href,'_blank')
    }
    

    解决vue路由跳转报错

    原因:据翻看大佬的解释,vue-router ≥3.0版本回调形式以及改成promise api的形式了,返回的是一个promise,如果没有捕获到错误,控制台始终会出现如图的警告
    
    解决:在pages/router/router.js  即路由页面添加以下代码
    import Vue from 'vue'
    import VueRouter from 'vue-router'
    Vue.use(VueRouter)
    + const routerPush = VueRouter.prototype.push
    + VueRouter.prototype.push = function push(location) {
    +   return routerPush.call(this, location).catch(error=> error)
    + }
    

    转换时间

            transDate(dateNum){
                let date=null
                if(dateNum){
                    date=new Date(dateNum)
                }else{
                    date=new Date()
                }
                let Y=date.getFullYear()
                let M=date.getMonth()+1
                M=M<10?('0'+M):M
                let D=date.getDate()
                D=D<10?('0'+D):D
                let h=date.getHours()
                h=h<10?('0'+h):h
                let m=date.getMinutes()
                m=m<10?('0'+m):m
                let s=date.getSeconds()
                s=s<10?('0'+s):s
    
                this.releaseTime=`${Y}-${M}-${D} ${h}:${m}:${s}`
                
            },
    

    antd回到顶部功能的使用,更改监听的元素(组件默认的监听对象是window,这里我们更改成其他元素)

    <div class="go_top_content">
        <a-back-top :target="getScrollElem" :visibilityHeight="1000">  //定义一个getScrollElem函数用来更改“回到顶部组件”监听的元素
              <span class="iconfont icon4fanhuidingbubai"></span>
        </a-back-top>
    </div>
    
    getScrollElem(){
        return document.getElementById('book_info')  //监听id为book_info的元素的滚动
    },
    

    使用DatePicker 日期选择框组件 https://www.cnblogs.com/huihuihero/p/13093253.html

  • 相关阅读:
    个人学习代码保存:例8.在存储过程中使用简单的事务处理
    个人学习代码保存:例6.多文件上传
    泛型 .net学习日记
    .net 点击刷新验证码问题
    个人学习代码保存:例11.读取Excel文件中的数据
    个人学习代码保存:例12.读取GridView文件中的数据到Excel文件
    个人学习代码保存:例5.利用标准FileUpload单文件上传
    Android视频采集
    Android视频采集+H264编码
    实时传输协议(RTP)和实时控制协议(RTCP)
  • 原文地址:https://www.cnblogs.com/huihuihero/p/11865746.html
Copyright © 2011-2022 走看看