代码演示

<template>
  <div class="demo-button">
    <h2>基础用法</h2>
    <Button href="https://www.baidu.com/">Link</Button>
    <Button type="primary">primary</Button>
    <Button type="success">Success</Button>
    <Button type="info">Info</Button>
    <Button type="warning">Warning</Button>
    <Button type="danger">Danger</Button>
    <Button type="danger" round>Round</Button>
    <h2>尺寸</h2>
    <Button size="small">small</Button>
    <Button size="normal">normal</Button>
    <Button size="large">large</Button>
    <h2>加载中</h2>
    <Button type="default" loading>Default</Button>
    <Button type="primary" loading>Primary</Button>
    <Button type="success" loading>Success</Button>
    <Button type="info" loading>Info</Button>
    <Button type="warning" loading>Warning</Button>
    <Button type="danger" loading>Danger</Button>
    <Button type="danger" loading round>Round</Button>
    <br />
    <br />
    <Button size="small" loading>small</Button>
    <Button size="normal" loading>normal</Button>
    <Button size="large" loading>large</Button>
    <h2>禁用</h2>
    <Button type="default" disabled>disabled</Button>
    <Button type="primary" disabled>disabled</Button>
    <Button type="success" disabled>disabled</Button>
    <Button type="info" disabled>disabled</Button>
    <Button type="warning" disabled>disabled</Button>
    <Button type="danger" disabled>disabled</Button>
    <h2>块级</h2>
    <p><Button type="default" block>块级按钮</Button></p>
    <p><Button type="primary" block>块级按钮</Button></p>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {},
  created() {},
};
</script>

<style lang="scss">
.demo-button {
  padding: 10px 0;
  > * {
    margin-right: 20px;
    margin-bottom: 20px;
  }
}
</style>
presentation

参数

TIP

This is a tip

参数

Cannot read property 'content' of null

源码

import { defineComponent, PropType, computed } from "vue";
import "./styles.scss";

export type ButtonType =
  | "default"
  | "primary"
  | "success"
  | "info"
  | "warning"
  | "danger";
export type ButtonSize = "normal" | "small" | "large";

export default defineComponent({
  name: "Button",
  props: {
    type: {
      type: String as PropType<ButtonType>,
      default: "default" as ButtonType,
    },
    size: {
      type: String as PropType<ButtonSize>,
      default: "normal" as ButtonSize,
    },
    htmlType: String as PropType<"button" | "submit" | "reset">,
    block: Boolean,
    round: Boolean,
    disabled: Boolean,
    loading: Boolean,
    onClick: Function as PropType<(e: Event) => any>,
    href: String,
  },
  setup(props, { slots }) {
    const useLink = computed(() => !!props.href);
    const btnClass = computed(() => [
      "Button",
      `Button-${props.type}`,
      {
        [`Button-size-${props.size}`]: props.size !== "normal",
        "Button-disabled": !props.loading && props.disabled,
        "Button-loading": props.loading,
        "Button-round": props.round,
        "Button-block": props.block,
      },
    ]);

    const onClick = (e: MouseEvent) => {
      if (props.disabled || props.loading) {
        return;
      }
      props.onClick?.(e);
    };

    return () =>
      useLink.value ? (
        <a
          class={btnClass.value}
          href={props.disabled ? undefined : props.href}
          onClick={onClick}
        >
          {slots.default?.()}
        </a>
      ) : (
        <>
          <button
            type={props.htmlType}
            class={btnClass.value}
            disabled={props.disabled || props.loading}
            onClick={onClick}
          >
            {slots.default?.()}
          </button>
        </>
      );
  },
});

最近更新: