一些笔记

330 阅读1分钟

JS相关

1.深度拷贝问题

深度拷贝,在父组件给子组件中传值的时候,有时候会遇到这种问题,子组件中更改数据,直接影响到父组件中的数据。可以试下下面的方法深度拷贝下,然后传给子组件

JSON.parse(JSON.stringify(obj))

2. 模板字符串

参考代码

<el-option v-for="(itemcy,index) in 28" :key="index.toString()" :label="`${itemcy}日`"></el-option>

3.字符串转base64

参考代码

 //字符串转base64
 
function encode(str){
// 对字符串进行编码
var encode = encodeURI(str);
// 对编码的字符串转化base64
var base64 = btoa(encode);
return base64;
}

// base64转字符串
function decode(base64){
// 对base64转编码
var decode = atob(base64);
// 编码转字符串
var str = decodeURI(decode);
return str;
}

VUE相关

1.项目文件参考

vue项目参考

2.Vue在跨域请求时携带cookie

const service = axios.create({
  baseURL: process.env.BASE_API,
  withCredentials: true,//可携带cookie
  timeout: 5000
})

3.vue项目中使用axios拦截器

1.request

应用场景,如果请求中需要携带tooken的话

service.interceptors.request.use(config => {
   config.headers.token = getToken()//getToken()是我自己项目中的方法
   return config
}, error => {
 // Do something with request error
 console.log(error) // for debug
})
2.response

应用场景:请求回来的数据进行判断

service.interceptors.response.use(response => response, error => {
 Message({
   message: error.message,
   type: 'error'
 })
 const status = error.response.status
 <!--返回的数据是401状态后进行的操作-->
 if (status === 401) {
   store.dispatch('FedLogOut').then(() => {
     location.reload()
   })
 }
   <!--返回的数据是403状态后进行的操作-->
 if (status === 403) {
   router.push('/403')
 }
 return Promise.reject(error)
})

4.this.$set的使用

应用场景:当你发现你给对象加了一个属性,在控制台能打印出来,但是却没有更新到视图上时,也许这个时候就需要用到this.$set()这个方法了

this.$set(你要改变的数组/对象,你要改变的位置/key,你要改成什么value)
this.$set(this.arr, 0, "OBKoro1"); // 改变数组
this.$set(this.obj, "c", "OBKoro1"); // 改变对象

5.vue项目中打包后的dist文件,本地访问测试

  • 安装http-server
npm install http-server -g 
  • 运行

在dist下面打开终端

http-server

6.input中进行电话和邮箱验证

js文件代码

// 是否是公司邮箱
export function isEmail(str) {
  const reg = /\w+((-w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+/
  return reg.test(str.trim())
}

// 是否是手机号码
export function isMobile(str) {
  if(str===undefined){
    str = '1'
    const reg = /0?(13|14|15|17|18)[0-9]{9}$/
  return reg.test(str.trim())
  }else{
    const reg = /0?(13|14|15|17|18)[0-9]{9}$/
  return reg.test(str.trim())
  }
  
}

idnex.vue中使用

//html
<el-form-item label="手机" prop="mobile">
    <el-input v-model="createUserForm.mobile" placeholder="请输入手机"></el-input>
</el-form-item>

//js
//1.
import {isMobile } from 'utils/validate'
//2.
//在rules的mobile中配置validator
mobile: [{validator: validateMobile, trigger: 'blur',required: true, }],
//3.
const validateMobile = (rule, value, callback) => {
      if (!isMobile(value)) {
        callback(new Error('手机号码格式不正确'));
      } else {
        callback();
      }
    }

7.实现电话 邮箱和身份证显示****

效果图

  • 代码
//写个过滤器
filters:{
     replaceMobile(res){
      return res.replace(/^(.{4})(?:\d+)(.{3})$/, "$1 **** $2");
      },
      replaceidNo(res){
      return res.replace(/^(.{10})(?:\d+)(.{4})$/, "$1 **** $2");
      },
  },
<el-table-column align="center" prop="mobile" label="手机号" width="160px">
 <template slot-scope="scope">
  <span>
    {{scope.row.mobile|replaceMobile}}
  </span>
</template>
</el-table-column>

element 相关

1. 循环form表单的校验问题

循环表单的时候有时候校验会出问题 可参考下面代码

<el-form ref="createCourseForm" :model="createCourseForm" :rules="rules" label-width="130px">
    <div v-for="(itemfh,index) in createCourseForm.kclist" :key="index" >
            <el-col :span="7">
              <el-form-item label="时间安排" 
              :prop="`kclist.${index}.scheduleIndex`"
              :rules="rules.scheduleIndex" >
                  <el-select v-model="itemfh.scheduleIndex"  placeholder="请选择时间安排">
                      <el-option v-for="(itemcy,index) in 28" :key="index.toString()" :label="`${itemcy}日`" :value="index.toString()"></el-option>
                  </el-select>
              </el-form-item>
            </el-col>
      </div>
</el-form>

其他相关

1.阿里云oss图片请求加水印或者格式处理

官方文档 help.aliyun.com/document_de…