Атомарный дизайн в машинописном тексте vue 3

В настоящее время я пытаюсь использовать атомарный дизайн в своем приложении vue.

Ниже приведен код для моего атома кнопки:

<template>
  <ElButton
    :type = "button?.type"
    :plain = "button?.plain"
    :rounded = "button?.rounded"
    :icon = "button?.icon"
    :disabled = "button?.disabled"
    :loading = "button?.loading"
    :size = "button?.size"
  >
    {{ button?.label }}
  </ElButton>
</template>

<script lang = "ts">
  import { ElButton } from "element-plus"
  import { PropType, defineComponent } from "vue"
  interface IButton {
    label: String
    type: String
    plain?: boolean
    rounded?: boolean
    icon?: String
    disabled?: boolean
    loading?: boolean
    size?: String
    rest?: any
  }
  export default defineComponent({
    name: "Button",
    props: {
      button: Object as PropType<IButton>,
    },
    components: {
      ElButton,
    },
  })
</script>

И я использую кнопку в моем HelloWorld.vue

<script lang = "ts">
  import {defineComponent } from "vue"
  import Button from "./atom/input/index.vue"

  export default defineComponent({
    components: {
      Button,
    },
  })
</script>

<template>
  <Button type = "success" size = "large" label = "Primary Button" />
</template>

С приведенной выше настройкой я могу легко использовать свой компонент кнопки. Единственная проблема в том, что кнопка не показывает текст.

Хотя я передал параметр label компоненту, он отображается как атрибут кнопки, когда я проверяю элемент кнопки.

Так:

<button class = "el-button el-button--success el-button--large" type = "button" label = "Primary Button"></button>

Может ли кто-нибудь помочь мне понять, что мне здесь не хватает?

это не составной API, это API опций

Dimava 27.11.2022 17:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
141
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш реквизит
props: { button: {label: string} }
но вы пытаетесь использовать их как
props: { label: string }

Или

  <Button :button = "{type:'success', size:'large', label:'Primary Button'}" />

или сделай реквизиты правильными

Есть ли способ, где я могу использовать эти реквизиты напрямую, как в реакции? Я из реагирующего фона, поэтому мне трудно понять vue 3

psudo 28.11.2022 12:24

Как я уже сказал, у вас есть один реквизит с именем button. Вам понадобится несколько реквизитов.

Dimava 28.11.2022 13:13

Кстати, вы новичок в Vue? Вы хотите найти хороший шаблон, использующий все новейшие функции Vue и сопутствующие вещи?

Dimava 28.11.2022 13:18

Тогда попробуйте github.com/antfu/vitesse, он использует все, что вам нужно для правильного интерфейса.

Dimava 28.11.2022 13:20
Ответ принят как подходящий

После глубокого изучения документации vue typescript. Я нашел подходящее решение для использования интерфейса на реквизитах с API-интерфейсом vue 3 typescript.

атом/кнопка/index.vue

<template>
  <ElButton
    :type = "type"
    :plain = "plain"
    :round = "round"
    :icon = "icon"
    :disabled = "disabled"
    :loading = "loading"
    :size = "size"
  >
    {{ label }}
  </ElButton>
</template>

<script setup lang = "ts">
  import { ElButton } from "element-plus"
  interface IButton {
    type: string
    label: string
    plain?: boolean
    round?: boolean
    icon?: string
    disabled?: boolean
    loading?: boolean
    size?: string
  }
  const { type, label, plain, round, icon, disabled, loading, size } =
    defineProps<IButton>()

</script>

/компонент/HelloWorld.vue

<script setup lang = "ts">
  import Button from "./atom/button/index.vue"
  import Input from "./atom/input/index.vue"

  const buttonClick = (type: string): void => {
    console.info(`string text ${type} string text`)
  }
</script>

<template>
  <Button
    :type = "'success'"
    :label = "'Success'"
    @click = "buttonClick('Success')"
  />
</template>

Другие вопросы по теме