美文网首页
工作中常用的Vue知识点(一)

工作中常用的Vue知识点(一)

作者: Bolinit | 来源:发表于2020-10-31 14:03 被阅读0次

避免click事件的多次点击

有两种方式:①通过自定义指令;②通过mixin混入preventReClick方法;
①自定义指令:
// 新建preventReClick.js文件
import Vue from 'vue'
const preventReClick = Vue.directive('preventReClick', {
  inserted: function (el, binding) {
    el.addEventListener('click', () => {
      if (!el.disabled) {
        el.disabled = true
        setTimeout(() => {
          el.disabled = false
        }, binding.value || 3000) // 传入绑定值就使用,默认3000毫秒内不可重复触发
      }
    })
  }
})
export { preventReClick }

// main.js文件下引用
import preventReClick from '@/.../preventReClick.js'

// 使用方式
<button v-preventReClick="1000">点击延迟1秒</button>
// 或
<button v-preventReClick>点击延迟3秒</button>

// 是不是很简单,但是有个问题,这种方式只适用于按钮标签元素

②mixin混入preventReClick方法:

// 新建mixin.js文件
const mixin = {
 // provide这种也可以,适用于全局引入,组件就直接使用:inject: ['preventReClick'],
  // provide() {
    // return {
      // preventReClick: this.preventReClick,
    // };
  // },
  data() {
    return {
      isClick: true,
    };
  },
  methods: {
    preventReClick(fn) { // 避免多次点击
      if (!this.isClick) return;
      this.isClick = false;
      fn();
      setTimeout(() => {
        this.isClick = true;
      }, 1000);
    },
  },
};
export default mixin;

// 使用方式
import mixin from './mixin'; // 引入路径
export default {
    mixins: [mixin],
}

// 原本写法:
<button @click="()=>{console.log('点击')}" >点击延迟</button>
// 更改后写法:
<button @click="preventReClick(()=>{console.log('点击')})" >点击延迟</button>

$on('hook:')监听移除事件

$on('hook:')方法,你可以仅使用一种生命周期方法(而不是两种)来定义/删除事件。

原本写法:
mounted () {
    window.addEventListener('resize', this.resizeHandler);
},
beforeDestroy () {
    window.removeEventListener('resize', this.resizeHandler);
}
 
优化写法:
mounted () {
  window.addEventListener('resize', this.resizeHandler);
  this.$on("hook:beforeDestroy", () => {
    window.removeEventListener('resize', this.resizeHandler);
  })
}

使用immediate:true,在初始化时触发watcher

如果你需要 wather 在实例初始化后立即运行,那么你所要做的就是将 wather 转换为具有 handler(newVal, oldVal) 函数以及即时 immediate: true 的对象。

watch: {
    title: {
      immediate: true,
      handler(newTitle, oldTitle) {
        console.log("Title changed from " + oldTitle + " to " + newTitle)
      }
    }
}

动态指令参数

假设你有一个按钮组件,并且在某些情况下想监听单击事件,而在其他情况下想监听双击事件。这就是这些指令派上用场的地方:

<template>
    ...
    <aButton @[someEvent]="handleSomeEvent()" />...
</template>
<script>
  ...
  data(){
    return{
      ...
      someEvent: someCondition ? "click" : "dbclick"
    }
  },
  methods: {
    handleSomeEvent(){
      // handle some event
    }
  }  
</script>

重用相同路由的组件

Vue出于性能原因,默认情况下共享组件将不会重新渲染,如果你尝试在使用相同组件的路由之间进行切换,则不会发生任何变化。

const routes = [
  {
    path: "/a",
    component: MyComponent
  },
  {
    path: "/b",
    component: MyComponent
  },
];

如果仍然希望重新渲染这些组件,则可以通过在 router-view 组件中提供 :key 属性来实现。

<template>
    <router-view :key="$route.path"></router-view>
</template>

相关文章

  • 工作中常用的Vue知识点(一)

    避免click事件的多次点击 有两种方式:①通过自定义指令;②通过mixin混入preventReClick方法;...

  • 2019-02-26

    前言 在公司实习使用Vue搭配着ElementUI完成前端的设计内容,受益颇多,将工作中常用的知识点在此处做下总结...

  • 工作中常用的vue知识点(二)-指令

    转自:https://segmentfault.com/a/1190000038475001[https://se...

  • vue学习(10)事件修饰符

    知识点: vue事件修饰符:1.prevent:阻止默认事件。(常用)2.stop:阻止冒泡事件。(常用)3.on...

  • 如何用原生js实现一个简单的v-show指令

    Vue 作为最主流的前端框架,中文资料齐全、入门简单、生态活跃,可以说是工作中最常用的,如今对 Vue 原理的熟悉...

  • iOS 常用到的知识点(一)

    iOS 常用到的知识点(一)iOS 常用到的知识点(二)iOS 常用到的知识点(三) 1. CGRectGetM...

  • iOS 常用到的知识点(三)

    iOS 常用到的知识点(一)iOS 常用到的知识点(二)iOS 常用到的知识点(三) 1. navigationB...

  • 在Vue中怎么使用cookie 之 vue-cookies

    cookie 在工作中比较常用, 可以自行封装一些 添加/删除/获取cookie的方法, 可参考这个在Vue中有个...

  • 透视表

    今天的知识点是学习数据透视表,这个我平时的工作中经常用到,基本的知识点我己熟悉,其实我加入特训营就是想学动...

  • Vue常用进阶知识点

    1,处理vue实例中的动态数据 我们有时候会在data选项中定义在实例内部需要用到的属性,像下面这样: 可是这个属...

网友评论

      本文标题:工作中常用的Vue知识点(一)

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