javascript - Vue js在点击事件上将一个函数从子智利传递给另一个子组件

标签 javascript vue.js nuxt.js

我试图在单击按钮时传递一个函数,在子元素中单击该按钮,然后通过父元素传递给另一个子组件,我不想为此使用商店,我该怎么做?
组件/页脚/footer.vue
-- 这是点击按钮的地方

<template>
    <div class="footer-bottom-header-menu-bar mob"  @click="showMenu">
        <img src="~/assets/svg/menubar.svg" alt="+" />
    </div>
</template>

<script>
export default {
    methods: {
        showMenu() {
            this.$emit("show-menu");
        }
    }
}
</script>
布局/default.vue
--这是接收点击函数并将其传递给app-header的父组件
<template>
    <div>
        <app-header />
        <Nuxt />
        <app-footer @show-menu="showMenu()"/>
    </div>
</template>

<script>
import header from "~/components/header/header";
import footer from "~/components/footer/footer";

export default {
    components: {
        'app-header': header,
        'app-footer': footer
    },
    methods: {
        showMenu() {
            console.log("clicked");
        }
    }
}
</script>
组件/标题/header.vue
-- 我想让 click 函数在这个组件内部执行一个 Action
<script>
export default {
    data() {
        return {
            showMenuBar: false
        }
    },
}
</script>

最佳答案

你为什么担心传递一个函数?
当你emit show-menu事件只是在你的父组件中切换一条数据,如下所示:

<template>
    <div>
        <app-header :showMenuBar="showMenuBar" />
        <Nuxt />
        <app-footer @show-menu="showMenu"/>
    </div>
</template>

<script>
import header from "~/components/header/header";
import footer from "~/components/footer/footer";

export default {
    components: {
        'app-header': header,
        'app-footer': footer
    },
    data() {
      return {
        showMenuBar: false;
      };
    },
    methods: {
        showMenu() {
            // I would make this more dynamic than always
            // hardcoding it to true, but you get the idea
            this.showMenuBar = true;
        }
    }
}
</script>
然后在你的AppHeader只需将其作为 Prop :
<script>
export default {
    props: {
      showMenuBar: { 
        type: Boolean, 
        default: false,
    },
}
</script>

关于javascript - Vue js在点击事件上将一个函数从子智利传递给另一个子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70225561/

相关文章:

vue.js - VueJS 使用 v-html 渲染 html 字符串中的属性

routes - 如果目标设置为 'static',Nuxt.js 路由中间件问题

javascript - 如何访问iframe元素?

javascript - js select() 文本确实可以在 iPhone 上运行

javascript - 检查复选框 A,会触发复选框 A 和 B。但是检查复选框 B 应该只会触发 Vuetify 中的复选框 B

javascript - 类型错误 : Cannot read property '0' of undefined firebase and vuex

javascript - nuxt-child 不渲染父组件

javascript - RadioButton 不会设置选中的 javascript

javascript - 基于多个嵌套值对嵌套数组进行排序的最佳方法

javascript - 如何使用 vue.js 更改页面上的 html?