本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(2)

Vue中slot的常见用法

发布于2021-05-30 12:31     阅读(1150)     评论(0)     点赞(17)     收藏(4)


Vue中的slot对于编写可复用可扩展的组件是再合适不过了,常见的用法有以下3种:

1. 插入一个匿名的slot,匿名的情况只适用于只插入一个的时候;

2. 插入有名的slot,当插入的slot有多个的时候,需要按名占位;

3. 在slot的内部可以将值通过有名slot传递出去,让外层组件接收;

以下是代码实例:

首先是App.vue,调用了所有组件,插入了所有的有名和匿名的Slot。

  1. <template>
  2. <div id="app">
  3. <!-- 外层组件 -->
  4. <todo-list>
  5. <!-- 插入匿名slot -->
  6. <todo-item
  7. @delete="handleDelete"
  8. v-for="(item, index) in list"
  9. :key="index"
  10. :title="item.title">
  11. <!-- 插入有名slot,接受内部返回的值 -->
  12. <template v-slot:header="{ value }">
  13. <!-- 接收有名slot内部返回的值 -->
  14. <span>前置图标--{{ value }}</span>
  15. </template>
  16. </todo-item>
  17. </todo-list>
  18. </div>
  19. </template>
  20. <script>
  21. import TodoList from "./components/TodoList.vue";
  22. import TodoItem from "./components/TodoItem.vue";
  23. export default {
  24. name: "app",
  25. components: {
  26. TodoItem,
  27. TodoList,
  28. },
  29. data() {
  30. return {
  31. list: [
  32. {
  33. title: "课程1",
  34. },
  35. {
  36. title: "课程2",
  37. },
  38. ],
  39. };
  40. },
  41. methods: {
  42. handleDelete(title){
  43. alert(title);
  44. }
  45. },
  46. };
  47. </script>

以下是App组件里引入的TodoList组件,这是一个可以插入匿名Slot的组件。

  1. <template>
  2. <ul>
  3. <!-- 匿名slot -->
  4. <slot></slot>
  5. </ul>
  6. </template>
  7. <script>
  8. export default {
  9. data: function () {
  10. return {};
  11. },
  12. };
  13. </script>

以下是App组件里引入的TodoItem组件,这是一个可以插入有名Slot的组件。

  1. <template>
  2. <li>
  3. <!-- 插入一个有名slot,名为header -->
  4. <slot name="header" :value="value"></slot>
  5. <span>--{{title}}--</span>
  6. <!-- 插入一个有名slot,名为tail,如果没有传值,则默认值为“哈哈哈”-->
  7. <slot name="tail">哈哈哈</slot>
  8. <button @click="handleClick" style="margin-left:10px;">删除</button>
  9. </li>
  10. </template>
  11. <script>
  12. export default {
  13. props: {
  14. title: String,
  15. },
  16. data: function () {
  17. return {
  18. // 给有名slot传值返回给外层组件
  19. value: "呵呵呵",
  20. };
  21. },
  22. methods: {
  23. handleClick() {
  24. // 触发delete方法,给父组件传值
  25. this.$emit("delete", this.title);
  26. },
  27. },
  28. };
  29. </script>
  30. <style scoped>
  31. </style>

以下是最终的渲染结果:

原文链接:https://blog.csdn.net/weixin_40629244/article/details/117283860




所属网站分类: 技术文章 > 博客

作者:Bhbvhbbgg

链接:http://www.qianduanheidong.com/blog/article/116029/c68c354267bbe5909db3/

来源:前端黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)