我有一个非常简单的实现,所以我觉得这可能是一个愚蠢的问题。刚从 vue 开始,我试图让一个组件能够列出其他组件;有点像可重复使用的列表、表格、网格等。
父组件gridView
作为普通组件导入:
<template>
<div :id="id" class="grid-view">
<slot></slot>
</div>
</template>
然后在另一个组件中,我尝试构建它:
<grid-view :dataSource="items">
<grid-view-item-test
v-for="(item, index) in items"
:key="index"
:title="item.title"
/>
</grid-view>
然后grid-view-item-test
很简单。title
作为道具。单独使用或不使用插槽都可以完全正常工作,但我想让它grid-view
可重用,以获取我添加的任何其他组件并按原样显示。
<template>
<div>
<div>{{ title }}</div>
</div>
</template>
如果我要做这样的事情:
<grid-view :dataSource="items">
<grid-view-item-test
:key="index"
:title="'Test 1'"
/>
<grid-view-item-test
:title="'Test 2'"
/>
<grid-view-item-test
:title="'Test 3'"
/>
</grid-view>
它工作得很好。我做错了循环吗?我可以确认循环可以正确获取项目数。如果我在插槽上进行默认后备 - 我得到正确的数字,并且我直接在grid-view
组件外部打印了它。
这不是一种可能吗?如果不是,您是否只使用 HTML 而不是可重用表格的组件,因为这似乎工作正常。
编辑:
如果我使用字符串或数字,但不使用对象,它完全可以正常工作。
我已经追踪到它items
是一个空数组作为计算变量,然后抛出TypeError: null is not an object (evaluating 'oldChildren[i]')
. 可以确认它items
开始为空,然后在数据库调用设置它后填充,但我想我不能用插槽做类似的事情?
经过更多测试后,当您完全更新数据集(items
)时它会失败。像这样的插槽无法重新渲染吗?
如果在初始数组中没有项目时我有一个空的 div (或任何东西),它可以完美地工作。