Skip to content

SButton <s-button> ​

触发一个操作或进行导航,支持 primary、secondary、tertiary 变体、图标和加载状态。 SButton 是 Shopify Polaris <s-button> web component 的带类型 Vue 3 wrapper。

ts
import { SButton } from 'polaris-vue-elements'

最佳实践 ​

  • 使用清晰的动词作为标签。 准确说明按钮的作用,例如“保存”“编辑”或“添加标签”。使用句子大小写,省略“a”“the”等冗余词,并且不要加标点。
  • tone="critical" 只用于破坏性操作。 仅当操作难以或无法撤销时才使用它;一般来说,色调应与操作的重要程度相匹配。
  • 让层级一目了然。 为主要操作设置 variant="primary",为辅助操作设置 variant="secondary",为补充操作设置 variant="tertiary",让商家能分辨出哪个操作最重要。
  • 保持按钮位置一致。 在整个应用中将按钮放在相同的位置,让商家知道去哪里找它们。
  • 为仅含图标的按钮添加标签。 如果按钮只有图标没有文字,请为其设置 accessibilityLabel,告诉屏幕阅读器用户它的作用。
vue
<SButton icon="edit" accessibilityLabel="Edit product" />

参阅 Shopify 关于 <s-button> 的最佳实践(英文)以获取完整指南。

示例 ​

PrimarySecondaryTertiaryCritical
LoadingDisabled
Clicked 0 times
vue
<script setup>
import { ref } from 'vue'
import { SButton } from 'polaris-vue-elements'

const clicks = ref(0)
</script>

<template>
  <div style="display: flex; gap: 8px; flex-wrap: wrap; align-items: center;">
    <SButton variant="primary">Primary</SButton>
    <SButton variant="secondary">Secondary</SButton>
    <SButton variant="tertiary">Tertiary</SButton>
    <SButton tone="critical">Critical</SButton>
  </div>
  <div style="display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-top: 8px;">
    <SButton loading>Loading</SButton>
    <SButton disabled>Disabled</SButton>
  </div>
  <div style="margin-top: 8px;">
    <SButton @click="clicks++">Clicked {{ clicks }} times</SButton>
  </div>
</template>

Props ​

Prop类型说明
accessibilityLabelstring为屏幕阅读器等辅助技术描述组件用途或内容的标签。当仅凭可见内容无法清楚传达组件用途时,可用它提供额外的上下文。
command"--auto" | "--show" | "--hide" | "--toggle" | "--copy"设置此可点击元素被激活时 commandFor 应执行的操作。有关各组件支持的操作,请参阅相应组件的文档。 - --auto:目标组件的默认操作。 - --show:显示目标组件。 - --hide:隐藏目标组件。 - --toggle:切换目标组件。 - --copy:复制目标 ClipboardItem。
commandForstring应响应此组件上激活操作(例如点击)的组件 ID。有关如何控制目标的行为,请参阅 command。
disabledboolean禁用 Button,使其无法被点击或获得焦点。
downloadstring使浏览器将链接的 URL 视为下载,并以该字符串作为文件名。下载仅适用于同源 URL 或 blob: 和 data: 协议。
hrefstring要链接到的 URL。 - 如果设置,在执行 click 事件后会导航到 href 指定的位置。 - 如果设置了 commandFor,则会执行 command 而不是导航。
icon"color" | "info" | "adjust" | "affiliate" | "airplane" | "alert-bubble" | "alert-circle" | "alert-diamond" … (553 more)显示在按钮内部的图标,通常位于按钮文本之前。使用图标可以帮助用户快速识别按钮的操作,或提高可扫读性。接受图标库中的任意图标名称或自定义字符串标识符。
inlineSize"auto" | "fill" | "fit-content"Button 的显示内联宽度。 - auto:按钮尺寸取决于所在界面和上下文。 - fill:按钮占据 100% 的可用内联尺寸。 - fit-content:按钮占据容纳其内容所需的最小内联尺寸。
interestForstring应响应此组件上关注操作(例如悬停和聚焦)的组件 ID。
langstring文本内容的语言。当文本所用语言与页面其余部分不同时使用,以便屏幕阅读器等辅助技术采用正确的发音。该值应为 IANA 语言子标签注册表中的有效语言子标签。
loadingboolean在执行后台操作期间,用加载指示器替换内容。这也会禁用 Button。
target"auto" | "_blank" | "_self" | "_parent" | "_top"指定在何处显示链接的 URL。
tone"auto" | "neutral" | "critical"组件的语义含义和配色处理。 - critical:紧急问题或破坏性操作。 - auto:根据上下文自动确定。 - neutral:无特定意图的一般信息。
type"button" | "reset" | "submit"Button 的行为。 - submit:表示组件充当提交按钮,即会提交最近的表单。 - button:表示组件充当普通按钮,即没有默认操作。 - reset:表示组件充当重置按钮,即会重置最近的表单(将字段恢复为默认值)。如果组件支持 href 或 commandFor/command 并且设置了其中之一,则此属性会被忽略。
variant"auto" | "primary" | "secondary" | "tertiary"按钮组件的视觉外观。 - auto:根据按钮组件的上下文自动确定变体。 - primary:高强调按钮,用于页面上的主操作,应谨慎使用。 - secondary:中等强调按钮,用于次要操作。 - tertiary:低强调按钮,用于不太重要的操作。

为便于阅读,上面部分类型列已被截断;完整的联合类型见库中生成的 TypeScript 类型(src/lib/generated/types.ts)。

Events ​

Event类型
blurFocusEvent
clickMouseEvent
focusFocusEvent

在 <SButton> 上使用 @blur 形式的监听器来监听这些事件。

Slots ​

Slot说明
default按钮组件中显示的标签文本或元素,用于描述点击时将执行的操作。

基于 MIT 许可证发布。Vue 标志由 Evan You 设计,采用 CC BY-NC-SA 4.0 许可。