标签 vue 下的文章

vue - 比较两个Json对象是否相等

// 内容是否有修改
      // true:未改变;false:改变了
      isChange() {
        if(this.Compare(this.dialog.detail.form, this.dialog.detail.oldForm)){
          console.log('未改变');
        }else{
          console.log('改变');
        }
        return this.Compare(this.dialog.detail.form, this.dialog.detail.oldForm);
      },
      /**************************************比较json-start***************************************/
      isObj(object) {
        return object && typeof(object) == 'object' && Object.prototype.toString.call(object).toLowerCase() == "[object object]";
      },
      isArray(object) {
        return object && typeof(object) == 'object' && object.constructor == Array;
      },
      getLength(object) {
        var count = 0;
        for(var i in object) count++;
        return count;
      },
      CompareObj(objA, objB, flag) {
        for(var key in objA) {
          if(!flag) //跳出整个循环
            break;
          if(!objB.hasOwnProperty(key)) {
            flag = false;
            break;
          }
          if(!this.isArray(objA[key])) { //子级不是数组时,比较属性值
            if(objB[key] != objA[key]) {
              flag = false;
              break;
            }
          } else {
            if(!this.isArray(objB[key])) {
              flag = false;
              break;
            }
            var oA = objA[key],
              oB = objB[key];
            if(oA.length != oB.length) {
              flag = false;
              break;
            }
            for(var k in oA) {
              if(!flag) //这里跳出循环是为了不让递归继续
                break;
              flag = this.CompareObj(oA[k], oB[k], flag);
            }
          }
        }
        return flag;
      },
      Compare(objA, objB) {
        if(!this.isObj(objA) || !this.isObj(objB)) return false; //判断类型是否正确
        if(this.getLength(objA) != this.getLength(objB)) return false; //判断长度是否一致
        return this.CompareObj(objA, objB, true); //默认为true
      },
      /**************************************比较json-end***************************************/

vue - 滑动页面使el-select的选择项不超出页面而自动隐藏

mounted() {
      console.log('mounted');
      let that = this;
      window.addEventListener('scroll', function (e) {
        that.scrollFunc();
      }, true);
    },
    destroyed() {
      window.removeEventListener('scroll', this.scrollFunc);
    },
    methods: {
      scrollFunc() {
        // let header = document.getElementsByClassName('has-gutter')[0];
        let header = $('.has-gutter');
        let header_offset = header.offset();
        let header_top = +header_offset.top + 50;
        if(this.select === undefined || this.select === null || this.select === ''){
          return false;
        }
        let ref = this.$refs[this.select.id][0] || null;
        $('.el-select-dropdown').each(function (e) {
          if($(this).css('display') === 'none'){
          }else{
            let el_select_dropdown = this;
            let el_select_dropdown_offset_top = el_select_dropdown.offsetTop;
            if(+el_select_dropdown_offset_top <= +header_top){
              console.log('小于了');
              ref && ref.blur();
              // $(this).css('display', 'none');
              // ref.$refs.input.blur();
            }
          }
        });
      },
}

阅读全文

vue - 获取元素相对页面的高度

let keyboardDiv = document.getElementsByClassName('keyboard-container')[0];
let keyboard_offsetTop = keyboardDiv.offsetTop;
console.log('键盘高度:' + keyboard_offsetTop);
let wHeight = +keyboard_offsetTop + 270;
let signId = item.signId;
let inputId = 'input-' + signId;
let inputDiv = document.getElementById(inputId);
let ref = this.$refs[inputId][0];
let input_top = ref.$el.getBoundingClientRect().top;

vue - 长摁操作

let timeOutEvent=0;//定时器  
// html
<div @touchstart="gotouchstart" @touchmove="gotouchmove" @touchend="gotouchend"></div>
//js
gotouchstart(){
   let that = this;
   clearTimeout(timeOutEvent);//清除定时器
   timeOutEvent = 0;
   timeOutEvent = setTimeout(function(){
        //执行长按要执行的内容,
        // TODO
     },600);//这里设置定时
 },
//手释放,如果在500毫秒内就释放,则取消长按事件,此时可以执行onclick应该执行的事件
gotouchend(){
    clearTimeout(timeOutEvent);
      if(timeOutEvent!=0){
        //这里写要执行的内容(尤如onclick事件)
     }
},
//如果手指有移动,则取消所有事件,此时说明用户只是要移动而不是长按 
gotouchmove(){
     clearTimeout(timeOutEvent);//清除定时器
     timeOutEvent = 0;
},

vue - 动态绑定 class

:class="[
              ' dialog-bedOrRoomList text-ellipsis ',
              isSelect === true?' active ':' ',
              isDisabled === true?' disabled ':'',
              ]"

vue 中 filters 获取 data 里的数据

// 声明一个全局变量
let that;
// 在生命周期 beforeCreate里面改变this指向
beforeCreate: function () {
     that = this;
},
filters:{
  timeFilter(val){
      let data = that.time;
      return data;
  }
},