【问题标题】:Vue JS 3 Parent Calling Multiple Children methodsVue JS 3父调用多个子方法
【发布时间】:2022-06-30 21:00:17
【问题描述】:

我有一个常见问题解答的父页面和折叠问答的子组件。但是在常见问题页面上,我们有一个按钮来展开所有常见问题。所以我试图在子组件上调用一个方法,我们将有十几个这样的子组件。但是当我单击查看全部时,它只会打开最后一个子组件。为什么它只击中最后一个组件而不是所有组件?

import CollapsiblePanel from '@/components/CollapsiblePanel';

// Imports
import { ref } from 'vue';

const collapsiblePanelRef = ref();

function expand() {
    collapsiblePanelRef.value.expandAll()
}

然后用子引用标记...

 <a @click="expand">View All</a>
 <CollapsiblePanel ref="collapsiblePanelRef">
     <template v-slot:title>
         Sample title 1
     </template>
     <template v-slot:content>
        Lorem ipsum 1
     </template>
 </CollapsiblePanel>
 <CollapsiblePanel ref="collapsiblePanelRef">
     <template v-slot:title>
         Sample title 2
     </template>
     <template v-slot:content>
        Lorem ipsum 2
     </template>
 </CollapsiblePanel>

那么 CollapsiblePanel 看起来像......

function expandAll() {
    isActive.value = true;
}

defineExpose({
    expandAll
})

【问题讨论】:

    标签: vue.js vuejs3 vue-script-setup


    【解决方案1】:

    我不知道为什么只有最后一个打开的确切答案,但我宁愿用道具来做这个。在父模板中:

    <a @click="expandAll">View All</a>     
    <CollapsiblePanel :open="openAll">
        ...
    </CollapsiblePanel>
    <CollapsiblePanel :open="openAll">
        ...
    </CollapsiblePanel>
    

    父级按钮的功能:

    const openAll = ref(false);
    
    function expandAll() {
        openAll.value = !openAll.value;
    }
    

    比在 CollapsiblePanel 脚本设置中:

    const props = defineProps({openAll: Boolean});
    const currentOpen = ref(false);
    
    /// Call with click on child:
    const toggleIndividual = () => {
        currentOpen.value = !currentOpen.value;
    }
    /// If prop changes (expand all button is clicked) open child
    watch(props.openAll) {
       currentOpen.value = true;
    }
    

    并且在 CollapsiblePanel 模板中需要打开和关闭的 div 上的 v-if="currentOpen"。您可以将@click="toggleIndividual" 放在要单击以展开它的元素上。

    现在,如果您切换全部展开,所有子项都会展开。如果单击单个子项,它将折叠。

    希望这会有所帮助。

    【讨论】:

    • 我也探索过这种方法,但问题在于它们还需要单独控制并查看全部。如果我可以通过父级的函数翻转它,那么只有 1 个标志将是理想的,并且很难获得两组标志的所有用例。
    • 您控制的是子项还是父项中的个体崩溃?如果你在孩子身上做这件事,据我所知应该很容易。所以请让我知道是否是这种情况,我会将其添加到答案中。
    • 除非父母调用全部展开,否则孩子正在控制它。
    • 编辑了我的答案。我希望这是您正在寻找的。​​span>
    猜你喜欢
    • 2018-05-27
    • 2016-11-07
    • 2018-02-15
    • 1970-01-01
    • 2020-05-06
    • 2018-04-02
    • 1970-01-01
    • 2021-09-24
    • 2021-02-03
    相关资源
    最近更新 更多