zoukankan      html  css  js  c++  java
  • vue-slot插槽

    希望提供的组件带有一个可从子组件获取数据的可复用的插槽。

    希望每个独立的待办项渲染出不太一样的东西。这也是作用域插槽的用武之地。

    todo-list组件:

    <ul>
    <li
    v-for="todo in todos"
    v-bind:key="todo.id"
    >
    {{ todo.text }}
    </li>
    </ul>

    为了让这个特性成为可能,你需要做的全部事情就是将待办项内容包裹在一个 <slot> 元素上,然后将所有和其上下文相关的数据传递给这个插槽:

    在这个例子中,这个数据是 todo 对象:

    <ul>
    <li
    v-for="todo in todos"
    v-bind:key="todo.id"
    >
    <!-- 我们为每个 todo 准备了一个插槽,-->
    <!-- 将 `todo` 对象作为一个插槽的 prop 传入。-->
    <slot v-bind:todo="todo">
    <!-- 回退的内容 -->
    {{ todo.text }}
    </slot>
    </li>
    </ul>

    现在当我们使用 <todo-list> 组件的时候,我们可以选择为待办项定义一个不一样的 <template> 作为替代方案,并且可以通过 slot-scope 特性从子组件获取数据:

    <todo-list v-bind:todos="todos">
    <!-- 将 `slotProps` 定义为插槽作用域的名字 -->
    <template slot-scope="slotProps">
    <!-- 为待办项自定义一个模板,-->
    <!-- 通过 `slotProps` 定制每个待办项。-->
    <span v-if="slotProps.todo.isComplete">✓</span>
    {{ slotProps.todo.text }}
    </template>
    </todo-list>


    在 2.5.0+,slot-scope 不再限制在 <template> 元素上使用,而可以用在插槽内的任何元素或组件上。

    解构slot-scope

    如果一个 JavaScript 表达式在一个函数定义的参数位置有效,那么这个表达式实际上就可以被 slot-scope 接受。也就是说你可以在支持的环境下 (单文件组件或现代浏览器),在这些表达式中使用 ES2015 解构语法。例如:

    <todo-list v-bind:todos="todos">
    <template slot-scope="{ todo }">
    <span v-if="todo.isComplete">✓</span>
    {{ todo.text }}
    </template>
    </todo-list>
  • 相关阅读:
    服务器重启
    aliyun修复漏洞之后,重启php-fpm命令
    数据结构和算法绪论(一)
    微信小程序+微信公众号开发总结
    数字校园项目-学生失联预警系统(三)----数据库设计
    数字校园项目-学生失联预警系统(二)-----项目部署
    数字校园项目-学生失联预警系统(一)
    gdut极路由破解教程
    项目:JavaWeb聊天室(问题汇总)
    项目:点餐系统(问题汇总)
  • 原文地址:https://www.cnblogs.com/limengyao/p/9564717.html
Copyright © 2011-2022 走看看