• 0409-0416的笔记


    1 获取前几天,近几个月的时间

      function getDay(day) {
        var today = new Date();
    
        var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
        today.setTime(targetday_milliseconds); //注意,这行是关键代码
        var tYear = today.getFullYear();
        var tMonth = today.getMonth();
        var tDate = today.getDate();
        tMonth = doHandle(tMonth + 1);
        tDate = doHandle(tDate);
        console.log(tYear + "-" + tMonth + "-" + tDate)
        return tYear + "-" + tMonth + "-" + tDate;
      }
      function doHandle(val) {
        return val.toString().length === 1?`0${val}`:val;
      }
      getDay(0); //当天日期
      getDay(3); // 前三天
      getDay(7); // 前一周
      getDay(31); // 近一个月
    

    2 vue的$nextTick()

    官方说法:将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新
    简单来说,Vue 在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。
    注意 mounted 不会承诺所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,可以用 vm.$nextTick 替换掉 mounted

    mounted: function () {
      this.$nextTick(function () {
        // Code that will run only after the
        // entire view has been rendered
      })
    }
    

    3 vue的$set

    在开发过程中,我们时常会遇到这样一种情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的。
    根据官方文档定义:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。
    根据vue的两大缺陷:无法对对象添加新属性和删除新属性,二是不支持通过索引去设置数组成员,但官方又定义:Vue 不允许在已经创建的实例上动态添加新的根级响应式属性 (root-level reactive property)。然而它可以使用 Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上

    $set可以解决这两者问题。

    data () {
      return {
        arr: ['one','two','three'],
        obj: {
          name: 'peter',
          age: 26
        }
      }
    }
    methods: {
      btnclick () {
        this.arr[0] = 'four' // 这样数据发生了改变,但视图未更新
        this.$set(this.arr,0,'four') // 两者都改变
        this.$set(this.obj,'color','red')
      }
    }
    

    4 vue的watch

    watch是类似于methods一样的对象,既然是对象,那么就有键值对,
    键:就是你要监控的那个家伙,比如说$route,已存在的data的值,这个就是要监控路由的变化。或者是data中的某个变量,只要值发生了改变就会触发
    值可以是函数:就是当你监控的家伙变化时,需要执行的函数,这个函数有两个形参,第一个是当前值,第二个是变化后的值。

      a: function (val, oldVal) {
        console.log(val,oldVal)
      }
    

    值也可以是函数名:不过这个函数名要用单引号来包裹。

      b:'clickbtn'
    

    值可以是对象,包括选项的对象
    选项包括有三个。

    • 第一个handler:其值是一个回调函数。即监听到变化时应该执行的函数。

    • 第二个是deep:其值是true或false;确认是否深入监听。(一般监听时是不能监听到对象属性值的变化的,数组的值变化可以听到。)

    • 第三个是immediate:其值是true或false;确认是否以当前的初始值执行handler的函数。(页面加载之初先执行一次handler)

      c: {
        handler: function (val, oldVal) { /* ... */ },
        deep: true,
        immediate: true
      }
      

    5 获取对象的长度

    var obj = {'name' : 'Tom' , 'sex' : 'male' , 'age' : '14'};
    var arr = Object.keys(obj);
    console.log(arr);  // ['name','sex','age']
    console.log(arr.length);  //3
    

    6 vue的父调子的方法

    父组件可以通过ref的方式去调用子组件的方法和值,具体:父组件想调用子组件的方法,可以在子组件中加上ref,然后通过this.$refs.ref.method调用

    父组件:

      <template>
        <div @click="parent">
          <child ref="child"></child>
        </div>
      </template>
      <script>
        import child from '~/components/dam/child.vue';
        export default {
          components: {
            child
          },
          methods: {
            parent() {
              this.$refs.child.child();
            }
          }
        };
      </script>
    

    子组件:

      <template>
        <div>{{name}}</div>
      </template>
      <script>
        export default {
          data() {
            return {
              name: '测试'
            };
          },
          methods: {
            child() {
              console.log(this.name);
            }
          }
        };
      </script>
    

    在父组件中, this.$refs.child 返回的是一个vue实例,可以直接调用这个实例的方法,同样的也可以取到子组件的值。

    7 vue的子调父的方法

    子组件调用父组件有三种方式:

    • 直接在子组件中通过this.$parent.event来调用父组件的方法

      父组件

        <template>
          <div>
            <child></child>
          </div>
        </template>
        <script>
          import child from '~/components/dam/child';
          export default {
            components: {
              child
            },
            methods: {
              parent() {
                console.log('测试');
              }
            }
          };
        </script>
      

      子组件

        <template>
          <div>
            <button @click="child()">点击</button>
          </div>
        </template>
        <script>
          export default {
            methods: {
              child() {
                this.$parent.parent();
              }
            }
          };
        </script>
      
    • 在子组件里用$emit向父组件触发一个事件,父组件监听这个事件

      父组件

        <template>
          <div>
            <child @parent="parent"></child>
          </div>
        </template>
        <script>
          import child from '~/components/dam/child';
          export default {
            components: {
              child
            },
            methods: {
              parent() {
                console.log('测试');
              }
            }
          };
        </script>
      

      子组件

        <template>
          <div>
            <button @click="child()">点击</button>
          </div>
        </template>
        <script>
          export default {
            methods: {
              child() {
                this.$emit('fatherMethod');
              }
            }
          };
        </script>
      
    • 父组件把方法传入子组件中,在子组件里直接调用这个方法

      父组件

        <template>
          <div>
            <child :parent="parent"></child>
          </div>
        </template>
        <script>
          import child from '~/components/dam/child';
          export default {
            components: {
              child
            },
            methods: {
              parent() {
                console.log('测试');
              }
            }
          };
        </script>
      

      子组件

        <template>
          <div>
            <button @click="childMethod()">点击</button>
          </div>
        </template>
        <script>
          export default {
            props: {
              fatherMethod: {
                type: Function,
                default: null
              }
            },
            methods: {
              childMethod() {
                if (this.fatherMethod) {
                  this.fatherMethod();
                }
              }
            }
          };
        </script>
  • 相关阅读:
    springdataJpa对无主键表或视图查询的支持
    Blynk系列随笔
    arduino系列文章
    Debezium系列随笔
    Kafka系列随笔
    SSAS 收藏
    Saiku 系列
    Mondrian系列
    数据仓库理论学习
    加密解密
  • 原文地址:https://www.cnblogs.com/sqh17/p/10720673.html
Copyright © 2020-2023  润新知