zoukankan      html  css  js  c++  java
  • 项目技术点总结

    VUE项目列表

    PC端:工业云官网

    主要用的是element-ui组件库,有两种引入方式:一种时候全局引入,还有一种是cdn 引入。

    一、vue技术点

       1、注册登录页面:

             a、slot的运用;

             b、vue一些属性的运用,后端渲染的时候用v-html;

             c、表单验证,引入vue-validator, element-ui 配套的验证插件;

             d、正则表达式:

                  定义全局过滤器:

    // 过滤非法字符
    Vue.filter('validate', function (val) {
      val = val.toString()
      let reg = /[ `~!@#$%^&*()_+<>?:"{},/;' ]/im
      if (reg.test(val)) {
        alert('请勿输入非法字符')
        // 返回时删除非法字符
        return val.substr(0, val.length - 1)
      } else {
        // 原内容返回
        return val
      }
    })

        定义全局方法validate 

             常用正则表达式:

    // name
    export function checkName (rule, value, callback) {
      if (!value) {
        callback(new Error('用户名不能为空'))
      } else {
        // console.log(value.length);
        if (!(/^[a-zA-Z][a-zA-Z0-9_]{4,26}/.test(value))) {
          callback(new Error('5-25个字符,只限数字与字母,必须以字母开头不能包含非法字符'))
        } else {
          callback()
        }
      }
    }
    // mobile
    export function checkMobile (rule, value, callback) {
      if (!value) {
        callback(new Error('手机号不能为空'))
      } else {
        if (!(/^(1)[34578]d{9}$/g.test(value))) {
          callback(new Error('请输入中国大陆手机号,其他用户不可见'))
        } else {
          callback()
        }
      }
    }
    
    // email
    export function checkEmail (rule, value, callback) {
      if (!value) {
        callback(new Error('邮箱不能为空'))
      } else {
        if (!(/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/.test(value))) {
          callback(new Error('邮箱格式不对'))
        } else {
          callback()
        }
      }
    }
    
    // 密码
    export function checkPsw (rule, value, callback) {
      if (!value) {
        callback(new Error('密码不能为空'))
      } else {
        if (!(/(?!^[0-9]+$)(?!^[A-z]+$)(?!^[^A-z0-9]+$)^.{5,25}$/.test(value))) {
          callback(new Error('密码至少包括字母,数字,符号中两种5-25个字符,不允许有空格'))
        } else {
          callback()
        }
      }
    }
    // 验证码
    export function checkVerifyCode (rule, value, callback) {
      if (!value) {
        callback(new Error('请输入验证码'))
      } else {
        callback()
      }
    }
    
    // 中文姓名
    export function checkChinaName (rule, value, callback) {
      if (!value) {
        callback(new Error('姓名不能为空'))
      } else {
        if (!(/^([u4e00-u9fa5]){2,7}$/.test(value))) {
          callback(new Error('请输入正确的姓名'))
        } else {
          callback()
        }
      }
    }

             e、css方面

                  主要是sass 的运用;

    •    滚动条设置宽度:  ::webkit-scrollbar{1px;}
    •    宽高适配可以用:  类似于 calc(100%-80px)
    •    阴影(box-shadow): 多个阴影用逗号隔开;
    •    css中用了position:fixed,那子元素也需要设置position

              f、Vuex

                    vuex的核心是store,store 是一个大的容器,其中有大量的状态state。vuex 其实就是状态管理器,当其中的状态发生改变的时候,相应的vue组件也会得到高效的更新。

                    vuex一般分为四个部分:

                

    // state文件:index.js   
    
    import actions from './actions'
    import mutations from './mutations'
    import getters from './getters'
    
    // 初始化state状态
    const state = {
        homeDataLoading: false,
        homeData: {},
        baseInfoData: {
            userName: '',
            gender: ''
        },
        HomeRequestStatus: {
            isError: false,
            msg: ''
        }
    }
    export default {
        state,
        getters,
        actions,
        mutations
    }

      

    相应的TYPE

    // mutations_types.js  type文件
    //
    获取首页数据 export const GET_HOME_DATA = 'GET_HOME_DATA' export const GET_HOME_DATA_CESHI = 'GET_HOME_DATA_CESHI' export const LOADING_HOME_DATA = 'LOADING_HOME_DATA' // 获取首页数据成功 export const GET_HOME_DATA_SUCCESS = 'GET_HOME_DATA_SUCCESS' // 获取首页数据失败 export const GET_HOME_DATA_FAILED = 'GET_HOME_DATA_FAILED'

             mutatioans.js文件

    // 处理同步逻辑
    
    import * as type from './mutations_types'
    import storage from '../../../config/storageHelp'
    export default {
        [type.LOADING_HOME_DATA](state) {
            state.homeDataLoading = true
            state.HomeRequestStatus.msg = ''
            state.HomeRequestStatus.isError = false
        },
    
        [type.GET_HOME_DATA_SUCCESS](state, data) {
            let payload = data.payload
            state.homeDataLoading = false
            if (payload.result.success || window.navigator.onLine === false) {
                state.homeData = window.navigator.onLine === false ? payload.result : payload.result.data
                storage.userName = state.homeData.userRealName
                storage.gender = state.homeData.genderStr
                storage.save()
                state.HomeRequestStatus.isError = false
            } else {
                state.HomeRequestStatus.msg = payload.result.message
                state.HomeRequestStatus.isError = true
            }
        },
    
        [type.GET_HOME_DATA_FAILED](state, data) {
            let payload = data.payload
            state.homeDataLoading = false
            state.HomeRequestStatus.msg = payload.msg
            state.HomeRequestStatus.isError = true
        }
    }

            action文件,触发commit方法,改变state

          

    // 主要处理异步逻辑
    
    import * as type from './mutations_types'
    //  import moment from 'moment'
    import {
        getHomeData
    } from '../../../service/home'
    
    export default {
        [type.GET_HOME_DATA]({
            dispatch,
            commit,
            state
        }, data) {
            if (window.navigator.onLine === true) {
                commit(type.LOADING_HOME_DATA)
                getHomeData().then(res => {
                    commit({
                        type: type.GET_HOME_DATA_SUCCESS,
                        payload: {
                            result: res
                        }
                    })
                }).catch((ex) => {
                    commit({
                        type: type.GET_HOME_DATA_FAILED,
                        payload: {
                            isError: true,
                            msg: '获取首页数据失败, 服务器异常'
                        }
                    })
                })
            } else {
                commit(type.LOADING_HOME_DATA)
                setTimeout(() => {
                    commit({
                        type: type.GET_HOME_DATA_SUCCESS,
                        payload: {
                            result: data.payload
                        }
                    })
                }, 1000);
            }
        },
        [type.GET_HOME_DATA_CESHI] (context, data) {
            console.log(context, 'context是什么啊')
        }
    }

    getters.js 输出vue组件中需要的state

    //  store 的计算属性
    //  import state from '../../../store/state'
    
    export default {
        homeDataLoading: (state, getters, rootState) => {
            // console.log(rootState, 'rootState是什么啊')
            return state.homeDataLoading
        },
        homeData: (state, getters, rootState) => {
            return state.homeData
        },
        HomeRequestStatus: (state, getters, rootState) => {
            return state.HomeRequestStatus
        }
    }

    其中vue组件中可以通过dispatch方法触发相应的type,改变相应的state.

                   

               

            

              g、生命周期

                  其中想提下this.$nextTick  DOM渲染完后调用。例如新闻列表的渲染,在created中获取了,但需要对渲染后的列表进行操作。

                   

      updateMessage() {
        this.message = 'updated'
        console.log(this.$el.textContent) // => 'not updated'
        this.$nextTick(() => {
          console.log(this.$el.textContent) // => 'updated' =>做某些操作
        })
      }

             e、页面缓存问题

               

                不建议使用!

            g、组件间的传值

                  

           

        

  • 相关阅读:
    GD32E507移植FreeRTOS
    FreeRTOS学习笔记——任务基础知识
    FreeRTOS学习笔记——系统配置
    am335x WG209 wifi模块自动配置的脚本
    树莓派学习笔记——Systemd进程启动
    am335x WG209 wifi模块驱动移植
    树莓派学习笔记——搭建Samba服务端
    树莓派学习笔记——内核编译
    一个复制文件的Shell脚本
    Makefile学习笔记——Makefile通配符的使用
  • 原文地址:https://www.cnblogs.com/leyan/p/10382233.html
Copyright © 2011-2022 走看看