Vue提升:理解vue中的 slot-scope=“scope“

122 篇文章 11 订阅
86 篇文章 21 订阅

slot是插槽,slot-scope=“scope“语义更加明确,相当于一行的数据,在实际开发中会碰到如下的场景

 这个工作状态是变化的,而我们就可以通过后端返回的具体值来判断这里应该显示什么样的内容,具体代码如下

    <el-table-column label="工单状态" prop="status">
          <template slot-scope="scope">
            <span style="margin-left: 10px">{{
              scope.row.status == "0"
                ? "待办"
                : scope.row.status == "1"
                ? "处置中"
                : "完成"
            }}</span>
          </template>
        </el-table-column>

 后端返回消息如下,status状态值为0就是代办,为1就是处置,为2就是完成

此外这里每行还有编辑,删除等功能,事件处理函数中的参数,scope.$index就是该行的下标,scope.row就是该行的数据所有消息对象,有了这两个参数我们就可以实现编辑(分配,转派,完工),删除功能,所以这个 slot-scope="scope"是非常重要的

如果有用过element-ui中的table组件,可能会发现有这么一个写法:

 

<template slot-scope="scope">

在实际的使用过程中,这种用法当然不仅仅局限于此,其他的地方也会用到。到底这里有什么特别之处呢?

我们看看普通的table用法:

 我们先说一说这个基础的用法里面,在el-table中,:data="tableData"是数据集,结构如下:

那么对于每一个el-table-column,我们只需要使用prop="date",就可以将该列的数据绑定为该数组所有的对象中的“date”属性,我们可以理解为对于tableData,这里始终取的是tableData[$index].date。

table按照tableData这个数组的长度来生成多少行,按照有多少个el-table-column来生成多少列。


现在我们可以看更高级的用法,也就是我们标题提到的<template slot-scope="scope">

    <el-table-column
      label="日期"
      width="180">
      <template slot-scope="scope">
        <i class="el-icon-time"></i>
        <span style="margin-left: 10px">{{ scope.row.date }}</span>
      </template>
    </el-table-column>

按照我们前面的理解,按照有多少个el-table-column来生成列,因此这里没有使用prop="date",生成的单元格也就是空白的一个单元格。

template(模版) 在这里属于一个固定用法: <template slot-scope="scope">

我们主要说一下这个scope是个什么东西,按照element上的提示:

通过 Scoped slot 可以获取到 row, column, $index 和 store(table 内部的状态管理)的数据

我们可以理解为:tableData是给到table的记录集,scope是table内部基于tableData生成出来的,我们可以用Excel描绘一下

我们传进去的tableData,在table内部生成了类似于Excel的scope,因此,通过scope.row.date,我们就可以读取到每一行中的date。

还有重要的一点,scope又并非是整个table,我们只是能通过scope.row获得当前的行数据,至于具体为什么,目前我还没有理解得很透彻。只是希望按照这个理解,能记住多点关于scope的使用。
总结:

slot-scope="scope" //取到当前单元格
scope.$index  //拿到当前行的index
scope.row  //拿到当前行的数据对象
scope.row.date  //是对象里面的data属性的值
  • 11
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vueslot-scope是一个用于在父组件传递数据给子组件的特殊属性。它允许你在父组件定义一个插槽,并将数据传递给子组件来使用。 使用slot-scope的一般步骤如下: 1. 在父组件定义一个插槽,并使用slot-scope属性指定一个变量名。例如: ```html <template> <div> <slot :item="item"></slot> </div> </template> ``` 在这个例子,我们使用:item="item"将变量item传递给插槽。 2. 在子组件使用插槽,并在插槽的内容使用slot-scope指定的变量名。例如: ```html <template> <div> <slot-scope="props"> <p>{{ props.item }}</p> </slot-scope> </div> </template> ``` 在这个例子,我们使用slot-scope="props"将传递给插槽的变量名设置为props,并在插槽的内容使用props.item来访问传递的数据。 3. 在父组件使用子组件,并在子组件标签传递数据给插槽。例如: ```html <template> <div> <child-component> <template v-slot:item="{ item }"> <p>{{ item }}</p> </template> </child-component> </div> </template> ``` 在这个例子,我们使用v-slot:item="{ item }"将插槽的变量名设置为item,并在插槽的内容使用item来访问传递给子组件的数据。 通过使用slot-scope,我们可以在父组件传递任意类型的数据给子组件,并在子组件使用这些数据进行渲染或其他操作。这种机制为组件之间的数据交互提供了一种灵活且强大的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值