vue 子组件抛出去的 用于 slot 的数据怎么写得更优雅一点?

发布于 2022-09-12 04:37:39 字数 142 浏览 21 评论 0

如图这个slotProps 是子组件内部 抛出来的。它只能就地加工吗?我该以哪种姿势改造它?
我的代码调用了两次函数。其实一次就有结果了。。
image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

◇流星雨 2022-09-19 04:37:39

这样呢?

<template v-slot:total="{ data }">
    <div>
        {{ void (temp = summaryMethod(data)) }}
        <div>当前页 总支出 {{ temp[0] }}</div>
        <div>总收入 {{ temp[1] }}</div>
    </div>
</template>
雨落□心尘 2022-09-19 04:37:39

我想到了几种思路,你可以参考一下。

第一种是把计算总支出和总收入的方法分开

总支出 {{summaryPay(slotProps.data)}}   总收入  {{summaryIncome(slotProps.data)}}

第二种是循环结果

<span v-for="(item, i) in summaryMethod(slotProps.data)" :key="i">
    {{i===0?'总支出':'总收入'}}    {{item}}
</span>

第三种是总结方法写在子组件里直接抛出结果

// 子组件
<slot name="total" :data="summaryMethod(data)"></slot>

// 父组件
总支出 {{slotProps.data[0]}}   总收入{{slotProps.data[1]}}

第四种是子组件不用slot抛出了,在data有变化的时候调用父组件的summaryMethod,然后直接记录在父组件里

// 子组件
dataChange () {
    this.$emit('summaryMethod', data)
}

// 父组件
summaryMethod (data) {
    ...
    this.summary = [pay ,income]
}
寄意 2022-09-19 04:37:39

说白了你想在 template 中定义临时变量。

我赞同用 v-for 来达到临时变量目的的方案,其他的多少有点因噎废食。

另外一个比较完美的方案就是,把这块拆分出去做另一个组件,它还是个函数式纯组件哦。

<div slot="total" slotScope="slotProps">
    <summary-text :summary="summaryMethod(slotProps.data)"></summary-text>
</div>

不要怕组件粒度小,该拆出去就拆。


v-for 可以这么干,等价于创建临时变量了:

<div slot="total" slotScope="slotProps">
    <template v-for="data in [summaryMethod(slotProps)]">
        <div>当前页 总支出 {{data[0]}}   总收入 {{data[1]}}</div>
    </template>
</div>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文