美文网首页
水电煤项目笔记

水电煤项目笔记

作者: 随风飞2019 | 来源:发表于2019-12-31 20:30 被阅读0次

    从后端请求回来的数据,设置过滤器处理数据(比如截取字符串)的时候,如果不做处理,会报val.slice不是一个函数方法。这是因为异步请求数据,数据在没有到位时会报错,所有过滤器里面要先判断数据是不是存在,存在再处理就不会报错了。

    vue里面监听oninput事件的写法 v-on:input="getPassWord(index)",必须这么写不然没用。其它方法监听不到最后一个密码的输入完成情况,这是一个很好的事件方法。输入框发生的事件流程依次为focus、keydown、input、keyup、change、blur

    for (let i = 0; i < res.length; i++) {
         this.$set(this.cityArr, i, res[i]);
    }
    省市下拉框案例,通过后端二次异步获取省份列表时候,直接把结果赋值给省份列表数组,在dom上不渲染的,因为vue无法监听到数组的变动,这时候需要用到
    this.$set(要改变的数组,要改变的位置,要改成的value),例如
    if (res) {
           for (let i = 0; i < res.length; i++) {
                        this.$set(this.cityArr, i, res[i]);
              }
    }
    经过如上处理,即可完美渲染页面
    

    对象合并,使用Object.assign(目标对象,…源对象)

    处理url的query参数,先按?号分割取后面一位
    url.split("?").pop()
    然后按&分割得到数组arr,然后for循环
    let str = arr[i].split('=');
    res[str[0]] = str[1];
    最终把结果放到res对象里面
    完整写法如下
    let tempArr = this.message.url
              .split("?")
              .pop()
              .split("&");
            let urlRes = {};
            for (let i = 0; i < tempArr.length; i++) {
              let str = tempArr[i].split("=");
              urlRes[str[0]] = str[1];
            }
    
    vue里面,input自动获取焦点的写法,首先给input一个ref,然后监听他的v-on:input事件
    v-on:input="xxx"
    this.$nextTick(x => {
              this.$refs.inputActive.focus();
            });
    

    姓名地址加星号的封装办法

    let temp = "hello world";
            function star(str,start,len){
                let left = str.substring(0,start);
                let middle = "*".replace(len);
                let right = str.substring(start+len);
                return left+middle+right
            }
    
    解决popup出现滚动穿透问题
    @touchmove.native.stop.prevent防止滚动穿透
    不管是mt-popup,还是vux的popup,都可以使用这个办法
    <popup v-model="show"  position="bottom"  :hide-on-blur=false  @touchmove.native.stop.prevent>
          ......
    </popup>
    popup外层需要包装一个div<div v-transfer-dom></div>
    transfer-dom需要注册,和data同级注册directives: {TransferDom}
    

    绑定事件的办法box.onclick=fn; 或者box.addEventListener("click",fun,false),注意addEventListener可以绑定多个执行方法,按顺序执行。
    解除事件的办法box.onclick = null,或者box.removeEventListener("click", fn, false);

    btn.onclick = function(){
    clearInterval(timer)
    //点击之前最好先清理一下定时器,防止重复点击越来越快的问题
                let timer = setInterval(function () {
                let box = document.getElementsByClassName("box")[0];
    //使用公式,对象当前位置 = 对象当前位置 + 步长
    // x = x+step
                let x = box.offsetLeft;
                let step = 10;
                x<600 ? (box.style.left = x + step + "px") : clearInterval(timer)
    //滑动到600结束,清理定时器
            }, 20)
    自动向右滑的方法,box需要先设置绝对定位,让它相对于body的left值不断变大
    

    mintui里面使用mt-index-list做省市二级选择,点击省份以后不滚动到顶部(城市部分不显示)的解决办法
    在mt-index-list内容顶部埋一个锚点<div ref="showAnchor"></div>
    点击选择省份以后,让锚点进入可视区域
    let showAnchor = this.$refs.showAnchor;
    showAnchor.scrollIntoView();

    vue如何让代码简洁
    判断根据情况使用&&,||,return等语句,比如根据一个结果计算另一个结果
    let tempRes = await getUserInf();
    下面一定要判断tempRes 的结果,如果有才执行的话,不要使用if else
    tempRes && 下面是继续的逻辑
    也可以使用if (!tempRes) return;来结束继续往下的执行

    watch监听一个值,生成一个结果,比如监听username,渲染真实姓名
    如果需要深度监听一个对象里面的值,
    可以加参数deep: true,
    也可以使用" username.a.b " : " getRealnameByUsername ",后面跟的getRealnameByUsername 是一个methods方法
    immediate:true参数,会立即触发,意思是页面渲染时根据username立即处理展示结果,不需要等待username变化,平常都是username变化后才会触发这个方法,这个参数会渲染时即可处理,有点类似计算属性

    vue离开页面记录滚动高度,回来时仍然滚动到指定高度的解决办法
    data() {
                return {
                    topNum: 0  //定义一个变量,接收滚动高度数字
                }
            },
            methods: {
                handleScroll() {
                this.topNum = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
    //滚动监听事件,滚动后,把滚动高度赋值给高度数字
                }
            },
            created() {
                window.addEventListener('scroll', this.handleScroll, true);
                this.topNum = window.localStorage.topNum;
    //进来前定义一个监听滚动的方法,把之前记录的数字读取出来
            },
            beforeRouteEnter(to, from, next) {
                next(vm => {
                    document.documentElement.scrollTop = vm.topNum;
    //进入前,滚动到指定高度
                })
            },
            beforeRouteLeave(to, from, next) {
                window.localStorage.topNum = this.topNum;
    //离开前,把滚动高度记录下来
                next()
            }
    
    
    //jquery原生的写法,下面两个方法都要放到$的init初始化中
    function scrollListenr(){
        // 监听滚动,记录高度
      $(document).scroll(function (){
        let scrollTop = $(this).scrollTop()
        setStore("scrollTop",scrollTop)
      })
    }
    
    function toTop(){
        // 回来时候,如果有高度,就滚动到指定高度
        let top = getStore("scrollTop")
        if(top!==undefined){
          $('html,body').animate({scrollTop: top},50);
        }
    }
    

    把数组的下标转换成ABCD的过滤器写法
    index2Letter(val){
    return "ABCDEFG"[val]
    }
    或者使用更为简洁的写法index2Letter:(val)=>"ABCDEFG"[val],

    vue背景图引入的方法
    1. data里面定义img,引入图片,img:require('../assets/imgs/600.jpg')
    或者script顶部引入import img from "../assets/imgs/600.jpg",然后img:img
    2. 然后在元素上使用:style="{backgroundImage:`url(${img})`}"
    

    momentjs格式化时间,如果一直出现格式成1970年,八成是因为字符串原因,把时间戳转数字再格式化就正常了。
    {{parseInt(item.createTime)|datetime}}

    created里面,可以拿到this.slots对象,在封装组件时有用, <span v-if="slots.default"><slot></slot></span>
    意思是只有传了默认slot插槽,这个span才显示,不然就不显示。

    获取使用人的ip,进而获取其所在省份城市
    <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
    <script type="text/javascript">
    console.log(returnCitySN["cip"])
    console.log(returnCitySN["cname"])
    </script>

    相关文章

      网友评论

          本文标题:水电煤项目笔记

          本文链接:https://www.haomeiwen.com/subject/uhsioctx.html