我正在try 创建一个可重用组件,用于迭代项、过滤项,并向槽中添加一些类(如果项是偶数、奇数、第一个、最后一个等等)

以下是我的可重用组件:

<template>
  <ul :class="classes">
    <slot
      v-for="(item, index) in filteredItems"
      :item="item"
      :class="{
        'first': index == 0,
        'odd': !(index % 2),
        'even': index % 2,
        'last': index == (filteredItems.length - 1)
      }"
    >
    </slot>
  </ul>
</template>

<script>
export default {
  props: ['items', 'classes'],
  data() {
    return {
      filteredItems: this.items.filter(item => item.active)
    };
  }
};
</script>

下面是我如何使用它:

<component-list :classes="'some-class'" :items="category.products">
  <template scope="props">
    <product :product="props.item"></product>
  </template>
<component-list>

一切都按预期工作,但它不会向放入其中的元素添加类.

我做错什么了吗?在Vue中技术上是否可行.JS2要做这样的事吗?

谢谢你的帮助和建议!

推荐答案

从插槽中移除vuejs2个样式,如here所述:

通过"命名"插入的内容不再保留插槽属性.使用包装器元素设置样式,或者对于高级用例,使用呈现函数以编程方式修改插入的内容.

建议的最简单的事情是使用包装器元素,如下所示:

<template>
  <ul :class="classes">
    <slot>
      <div
      v-for="(item, index) in filteredItems"
      :item="item"
      :class="{
        'first': index == 0,
        'odd': !(index % 2),
        'even': index % 2,
        'last': index == (filteredItems.length - 1)
      }"
    >
    </div>
    </slot>
  </ul>
</template>

Vue.js相关问答推荐

如何只提取一次用于无线电组过滤的数据,而不是针对数据库中的每个条目提取数据?

如何防止Nuxt3重新加载时滚动跳到网页顶部

Vuetify 复选框未正确显示值

VSelect - Select 不适用于 Vuetify 3 中的自定义项目插槽

使用 vue / nuxt js 切换 fontawesome 图标

如何在Vue js 3中根据API响应替换react 值

Vuejs - 更新数组中对象的数组

有没有办法初始化一个保留初始 HTML 的 Vue 对象

如何在 vue 路由中导航到 Bootstrap-vue 选项卡中的特定选项卡?

云Firestore保存额外的用户数据

Nuxt.js 中的开发工具样式编辑问题

使用 azure devops 发布管道部署 Vue.js 应用程序

如何判断 Vue 组件是否处于活动状态

如何将 v-if 与 Vue.js 中的值进行比较

Vuetify 2 个工具栏和 1 个导航抽屉,navigation drawer导航抽屉上方有 1 个工具栏

v-if inside v-for - 在两列中显示项目列表

VS代码中的红点是什么意思

Nuxt.js - API 调用的最佳场所

无法访问手表处理程序 vuejs 中的数据变量

Vue 2.0 设置路由 - 不要使用new来产生副作用