当前位置: 首页 > article >正文

Vue中如何构建组件,支持传参、插槽等功能。

目录

1. 创建基本的Vue组件

2. 使用组件

3. 支持插槽

3.1 默认插槽

3.2 使用插槽

4. 作用域插槽

5. 使用作用域插槽

总结


在Vue.js中,组件是构建UI的基本单元,通过组件可以实现代码的复用和组织。以下是如何编写可复用的Vue组件的详细步骤,包括传参、插槽等功能的实现。

1. 创建基本的Vue组件

首先,使用Vue单文件组件(.vue 文件)来定义一个组件。以下是一个简单的组件示例:

<!-- MyButton.vue -->
<template>
  <button @click="handleClick">{{ label }}</button>
</template>

<script>
export default {
  name: 'MyButton',
  props: {
    label: {
      type: String,
      default: '点击我' // 默认值
    }
  },
  methods: {
    handleClick() {
      this.$emit('clicked'); // 发出点击事件
    }
  }
}
</script>

<style scoped>
button {
  padding: 10px 20px;
  background-color: #007bff;
  color: white;
  border: none;
  border-radius: 5px;
  cursor: pointer;
}
button:hover {
  background-color: #0056b3;
}
</style>

2. 使用组件

在父组件中使用这个可复用的组件,并传递参数:

<!-- App.vue -->
<template>
  <div>
    <MyButton label="提交" @clicked="handleSubmit" />
    <MyButton label="取消" @clicked="handleCancel" />
  </div>
</template>

<script>
import MyButton from './MyButton.vue';

export default {
  name: 'App',
  components: {
    MyButton
  },
  methods: {
    handleSubmit() {
      alert('提交按钮被点击');
    },
    handleCancel() {
      alert('取消按钮被点击');
    }
  }
}
</script>

<style>
/* 样式可选 */
</style>

3. 支持插槽

插槽(slot)是Vue中实现组件内容灵活性的关键特性,它允许在使用组件时提供不同的内容。可以使用具名插槽、作用域插槽等多种方式。

3.1 默认插槽

以下是将插槽添加到组件中的示例:

<!-- MyCard.vue -->
<template>
  <div class="card">
    <div class="card-header">
      <slot name="header">默认标题</slot>
    </div>
    <div class="card-body">
      <slot>默认内容</slot>
    </div>
  </div>
</template>

<script>
export default {
  name: 'MyCard'
}
</script>

<style scoped>
.card {
  border: 1px solid #ccc;
  border-radius: 5px;
  margin: 10px;
}
.card-header {
  font-weight: bold;
  padding: 10px;
  background-color: #f8f9fa;
}
.card-body {
  padding: 10px;
}
</style>
3.2 使用插槽

现在,在父组件中使用这个MyCard组件,并传递插槽内容:

<!-- App.vue -->
<template>
  <div>
    <MyCard>
      <template #header>
        <h2>自定义标题</h2>
      </template>
      <p>这里是自定义内容</p>
    </MyCard>
  </div>
</template>

<script>
import MyCard from './MyCard.vue';

export default {
  name: 'App',
  components: {
    MyCard
  }
}
</script>

<style>
/* 样式可选 */
</style>

4. 作用域插槽

作用域插槽允许父组件访问子组件提供的内容。通常用于当子组件需要将某些值发送回父组件时。

示例

<!-- ItemList.vue -->
<template>
  <div>
    <slot v-for="item in items" :item="item" :key="item.id">
      默认内容
    </slot>
  </div>
</template>

<script>
export default {
  name: 'ItemList',
  props: {
    items: {
      type: Array,
      required: true
    }
  }
}
</script>
5. 使用作用域插槽

在父组件中,这样使用ItemList组件:

<!-- App.vue -->
<template>
  <div>
    <ItemList :items="itemList">
      <template v-slot="{ item }">
        <div>{{ item.name }}</div>
      </template>
    </ItemList>
  </div>
</template>

<script>
import ItemList from './ItemList.vue';

export default {
  name: 'App',
  components: {
    ItemList,
  },
  data() {
    return {
      itemList: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' },
      ]
    }
  }
}
</script>

总结

  1. 组件创建:定义组件时,使用templatescriptstyle部分,确保组件是可复用的。
  2. 传参:通过props接收父组件传来的参数。
  3. 插槽实现:使用插槽实现组件内容的灵活性,通过<slot>占位符和射流属性(具名插槽、作用域插槽)实现。
  4. 父子组件通信:通过$emit和插槽支持父子组件之间的通信,使得组件能够在满足封装的同时实现交互。

使用这些方法,可以构建出功能丰富、可复用的Vue组件,为你的应用提供更好的结构和可维护性。


http://www.kler.cn/a/391655.html

相关文章:

  • 基于迭代重加权最小二乘法的算法及例程
  • adb shell常用命令
  • 使用CubeMX一键配置Freertos
  • 红帽认证和华为认证哪个好?看完这4点你就明白了
  • Nginx配置自带的stub状态实现活动监控指标
  • 【vue2.0入门】vue单文件组件
  • 从经典到应用:探索 AlexNet 神经网络
  • C#画图板上色功能的详细示例代码
  • 将C++搭建的简单HTTP服务器升级为 HTTPS 服务器
  • RabbitMQ高效的消息队列中间件原理及实践
  • 【AliCloud】ack + ack-secret-manager + kms 敏感数据安全存储
  • Elasticsearch中什么是倒排索引?
  • 前端页面性能优化的常见问题与解决方案
  • 死信交换机,延迟队列和惰性队列
  • 电脑监控如何多画面显示?3大方法带你玩转多屏一画,实现管理效率翻倍涨!
  • Mac 安装protobuf2.5.0
  • C++(Qt)软件调试---静态分析工具cppcheck(22)
  • LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略
  • C# DataTable使用Linq查询详解
  • 2024最新版JavaScript逆向爬虫教程-------基础篇之Proxy与Reflect详解
  • 知识见闻 - 苹果手机拨号键长按
  • C# 字典应用
  • CTF-RE 从0到N: windows反调试-获取Process Environment Block(PEB)信息来检测调试
  • 时间序列数据结构、持久数据结构详细解读
  • DHCP与FTP
  • 【设计模式】行为型模式(一):模板方法模式、观察者模式