1

让Vue组件变成Powerful的组件

 2 years ago
source link: https://segmentfault.com/a/1190000041271216
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

powerful-componet

觉得好用的话,兄弟们帮忙点个star。
仓库地址

是一个包装Vue对象的工具函数。
支持Vue2 和Vue3

在Vue3下支持Typescript.

其实Vue2 也可以支持Typescript。但是没有必要。

npm install --save powerful-component

仅仅需要你遵循很少的规范,便可以使你的Vue组件得到增强。

获得以下功能.

页面是否加载完成的变量

pageIsReady。

默认为false,当mounted和created都执行完成时会,pageIsReady变为true

需要保证mounted和created是async/await风格写法。以保证pageIsReady变量能得知异步请求执行完成了。

<script lang="ts">
import powerfulDefineComponent from "powerful-component";
export default powerfulDefineComponent({
  methods: {
    //onClick执行完成之前,不会执行下一次
    async onClick() {
      await new Promise((done) => setTimeout(done, 1000));
    },
  },
});
</script>

<template>
    // 这个按钮在onClick执行期间会获得loading样式
  <button type="button" @click="onClick"></button>
</template>

点击事件防抖,并增加loading样式

以on开头的方法都会被增加防抖功能,并能对被点击的按钮增加loading样式

  1. 方法名以on开头
  2. async/await风格写法。这样powerful-componet才会知道方法是不是执行完成了
  3. 方法参数列表最后一个是点击事件的event,这样才能得到dom元素,添加样式。
<script lang="ts">
import powerfulDefineComponent from "powerful-component";
export default powerfulDefineComponent({
    async created() {
      await new Promise((done) => setTimeout(done, 1000));
    },
    async mounted() {
      await new Promise((done) => setTimeout(done, 2000));
    },
});
</script>

<template>
    //created和mounted都执行完成后,pageIsReady为true
  <h1>页面加载完成:{{ pageIsReady }}</h1>
</template>

这个库的核心思想来源于这篇文章活用async/await,实现一些让Vue更好用的装饰器


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK