201804问题总结

mock数据

项目:《华智数联官网-拟定方案模块》
时间: 201841日
问题:mockjs造 数据,因为使用了[{}],所以[]内得是一个对象 ,是属性名:属性值的形式,想去掉属性名,就不要对象形式就好了
错误代码:
var data = Mock.mock('cityList', {
  'cityList|4': [{
    'name': () => Mock.mock(Random.region()),
    'id|10000-20000': 100,
    'cityArr|20': [{//此处是生成一个数组,数组内元素均为对象,{key: value}形式
      city: () => Mock.mock(Random.city())//生成后为{city: '北京', city: '南京'}不想要此数组下的city键名,便去掉"city:"后提示错误,所以将外层{}去掉就可以了
    }]
  }]
})

正确代码:
var data = Mock.mock('cityList',{//接口名
  'cityList|4': [{//接口内数据的总名称,数据为4'name': () => Mock.mock(Random.region()),//此处要使用箭头函数,保证生成的数据不是全部一样的
    'id|10000-20000': 100,//生成的id在10000-20000范围内
    'cityArr|20': [//生成一个数组cityArr
      () => Mock.mock(Random.city())// 元素为随机城市 cityArr: ['北京', '天津']
    ]
  }]
})

为单选按钮设置初始值

项目:《华智数联官网-拟定方案模块》
时间: 201842日
场景:为单选按钮选中默认选项

问题1:单选按钮不能实现切换
computed: {
  regionRadio1:{
    get(a) {
      return 0
    },
    set(newValue) {
      this.regionRadio1 = newValue
    }
  }
},
分析:return 0不能切换,因为每次都返回0,每次都把数据设置为0处的状态,get里应该返回的是data里的值
解决办法:在data中定义初始值,返回初始值,或者直接在接口返回数据后赋值
关键代码:
<v-model="regionRadio1">
data: {
  return {
    regionRadio: 0
   }
}
computed: {
  regionRadio1:{

    get(a) {
      return this.regionRadio
    },
    set(newValue) {
      this.regionRadio1 = newValue
    }
  }
},

问题2:在接口处赋值时不起作用
分析:
给地区默认值时,地区RegionArr是从RegionList中取出来的,因为RegionList是从接口取出,所以在data中为regionArr = regionList[0]赋值会提示regionList为空,刚开始想要计算属性,后来想到在接口取得数据后赋值,即this.regionArr = this.regionList[0].name
因为this.regionArr为一个所选地区的数组,所以里边的元素均为<el-group-radio></el-radio :label="item.name">中的:label处绑定的值,此处为“华东,华南”等地名的Name值,当然也有可能是id为"01 02"等的值,所以要将regionList中的name值赋值给regionArr,达到赋初始值的目的

验证表单

项目:《华智数联官网-拟定方案模块》
时间: 201843日
场景:页面中有一个单选按钮是选择地区,要不就选择不限地区,要不就选择地区+城市,最后和表单中别的选项(日期、金额)等一起验证有无空项

问题1:验证地区处表单项是否完全
// 如果不限地区,则rFlag为0
  if (this.regionRadio === 0) {
    var rFlag = 0
  } else {
    // 如果选择地区,将region和city作为属性存入rFlag对象中
    rFlag = {}
    rFlag.region = this.regionArr
    rFlag.city = this.cityArr || []
  }
  // console.log(typeof(rFlag.region));
  if (rFlag !== 0 ||if ( rFlag.region === '' && rFlag.city.length === 0  ) {
    console.log('no');
    return false
  } else {
    console.log('yes');
  }

  分析:选择地区后虽然 rFlag.region === '' && rFlag.city.length === 0两条件都为false,但rFlag !== 0 也是成立的,所以还是会执行if语句,不会执行else语句,但并不能把rFlag !== 0 || rFlag.region === '' && rFlag.city.length === 0改成rFlag !== 0 && rFlag.region === '' && rFlag.city.length === 0,因为不选择地区的话rFlag 就为0
  所以此处选择用if嵌套语句,
  if{rFlag !== 0} {
    if ( rFlag.region === '' || rFlag.city.length === 0  ) {
      // 只要地区和城市有一个没选都返回false
      return false
    } else {
      // 或的反是与,此处意为两者都选后返回true
      return
    }
  } else {
    // rFlag = 0 即为地区不限
    return true
  }

  问题2:与其他项一起验证时规则不正确

  表单验证时一开始先判断单个未知选项(地区不限或选择地区),再判断已知选项集(金额,终端等),这时就会出现4种情况:
  let regionFlag = this.handleRegion()//此函数检验地区选择是否正确

  if (regionFlag) {// 如果选择了地区
    // 判断已知选项集,只要有一个没填就显示错误
    if (this.startDate == '' || this.endDate == '') {
      console.log(‘请完善信息’)
    } else {
      // 都填了正确
      todoSomething()
    }
  } else {//如果没有选择地区
    if (this.startDate == '' || this.endDate == '') {
      // 选项集也不完善就提示错误信息
      console.log(‘请完善信息’)
    } else {//选项集完全也提示错误信息
      console.log(‘请完善信息’)
    }
  }

  这样代码繁琐还不易懂,所以改为先判断已知选项集,再判断地区
  if (this.startDate == '' || this.endDate == '') {//只要有一个没选就提示错误
    console.log(‘请完善信息’)
  } else {//如果都选了去判断地区
    if (regionFlag) {
      todoSomething()
    } else {
      console.log(‘请完善信息’)
    }
  }

遍历用户选中信息

项目:《华智数联官网-拟定方案模块》
时间: 201843日
场景: 把age:1,sex:male等用户选择的不确定信息显示在页面中,所以需要把用户选中的信息单独存起来再遍历
问题1:json格式为[age: 1, sex: male],需要分别把key与value显示在页面中,vue中可直接遍历key,value值,不需要把key遍历出来放到一个数组中循环,单独放到数组中导致了页面中先把key循环完再显示循环value,不是一对一的key与value

问题2: 页面使用v-for显示key与value时不成功,打印要循环的json发现此处是一个数组,并不是对象,所以不存在obj.key与obj.value
分析:给json赋的初始值是[],所以json就是一个数组,应赋值为json:{}

问题3:给json存值,直接使用json[key]=val就可以,放在循环中依次把key:value存入json

问题4:遍历key值
for (keys in obj){
}

使用date方法时,看是否需要转换成对象

项目:《华智数联官网-拟定方案模块》
时间: 201843日
场景:把datePicker选择后的日期格式“Wed Apr 04 2018 17:35:07 GMT+0800 (中国标准时间)”转换成"2018/4/17"
问题:封装函数,用date参数接收,使用date.getFullYear等函数提示"date.getFullYear is not a function"
分析:不是一个函数,证明date不能使用这个函数,用typeof(date)发现结果是"string",所以传过来的date并不是一个对象,一开始,datePicker中的日期是使用"startDate: new Date(),endDate: new Date(),"来赋的初始值,所以并没有什么问题,但当datePicker中的值发生变化后,返回的值类型也是一个string,所以需要转换成date对象
解决办法:
let myDate = new Date(date)

v-for的key属性

项目:《华智数联官网-拟定方案模块》
时间: 201844日
问题: 在使用v-for时给出警告"component lists rendered with v-for should have explicit keys. See https://vuejs.org/guide/list.html#key for more info."
分析:为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。理想的 key 值是每项都有的且唯一的 id。建议尽可能在使用 v-for 时提供 key,除非遍历输出的 DOM 内容非常简单,或者是刻意依赖默认行为以获取性能上的提升。因为它是 Vue 识别节点的一个通用机制。
解决办法: <div v-for = "item in arr" :key = "item"></div>

在jquery事件里调用event对象

项目:《云乐道运营后台-新建媒资-调取百度地图api返回关键字结果》
时间:2018416日
问题:在事件里调用event对象,直接调用函数传递event参数,不起作用
问题代码:
  $("#model-input").click(stop(e))

  function stop(ev) {
    console.log(111111111)
    ev.stopPropagation()
  }
分析:应该将函数调用语句写在回调函数里


    $("#model-input").click(function(ev) {
      stop(ev)
    })
    function stop(ev) {
      console.log(111111111)
      ev.stopPropagation()
    }
   相当于
    $("#model-input").click(function(ev) {
      ev.stopPropagation()
   })

vuePress需要注意的问题

项目:《使用vuePress搭建个人博客》
时间: 2018424-25日
问题1:侧边栏sidebar写成了slidebar
问题2: sidebar配置也是主题配置,应该写到themeConfig里边
问题3.vuepress写到docs下,所有关于vuePress的配置

jquery的attr prop

项目:《云乐道运营后台-新建媒资-查找楼盘将坐标回显在页面中》
时间:2018425日
问题:选中地区后页面坐标不能回显示在页面中
分析:坐标可以打印出来,在chorme中element页面中发现input中value属性已有值,但不显示,用val()函数获取也获取不到
解决办法: 使用jquery的prop设置的元素原生属性,
相关知识: 
attr:
attr使用setAttribute方法实现,使用的是dom属性节点多设置自定义属性,
document.getElementById('div1').setAttribute('name','one');
prop":
而设置元素的原生属性(如name、value、checked等)使用prop,porp使用'.'或'[]'实现,是转化为js对象的属性,减少访问dom节点的频率。
document.getElementById('div1').name = 'one'; //或者
document.getElementById('div1')['name'] = 'one';

fatal: The remote end hung up unexpectedly5.00 KiB/s

项目:《自学vuepress》
时间:2018428
问题:使用git push推送项目的时候提示错误 

$ git push -f git@github.com:MOMO-0902/MOMO-0902.github.io.git master:gh-pages
Counting objects: 88, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (86/86), done.
Connection to github.com closed by remote host. KiB/s
fatal: The remote end hung up unexpectedly5.00 KiB/s
fatal: sha1 file '<stdout>' write error: Broken pipe
error: failed to push some refs to 'git@github.com:MOMO-0902/MOMO-0902.github.io.git'

分析:发生在push命令中,有可能 是push的文件过大导致,超过了git默认可以传输文件的大小
解决办法: 
1.在.git/config文件中加入
[http]
postBuffer = 524288000
2.执行命令
git config http.postBuffer 524288000

fatal: ‘origin’ does not appear to be a git repository

项目:《自学vuepress》
时间:2018428
问题:使用git push origin master推送项目的时候提示错误 
描述: 
fatal: 'origin' does not appear to be a git repository

以及fatal: Could not read from remote repository.

解决办法: 执行git remote add origin git@github.com:`<USERNAME>`/`<REPO>`.git
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值