项目技术点总结

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{width: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、组件间的传值

              

 

 

 

 

       

    

 

posted @ 2019-02-15 10:40  雪昀  阅读(295)  评论(0编辑  收藏  举报