这是我的应用程序

//App.vue
<template>
  <Header ref="header"></Header>
  <RouterView @emitDelet="deleteHeader"> 
  </RouterView>>
  <Footer></Footer>
</template>

这是我的路由,router-view包含三个部分.

[
  {
    path: '/home',
    name: 'home',
    component: Home,
    meta: {
      showFooter: true,
    },
  }, //
  {
    path: '/search',
    name: 'search',
    component: Search,
    meta: {
      showFooter: true,
    },
  },
  {
    path: '/Login',
    name: 'login',
    component: Login,
    meta: {
      showFooter: false,
    },
  }
]

我只想将自定义事件绑定到search个组件,我应该怎么做.

推荐答案

我认为最好的方法是使用inject/provide模式:

App.vue:

<template>
  <Header ref="header"></Header>
  <RouterView> 
  </RouterView>>
  <Footer></Footer>
</template>
<script setup>
import { provide } from 'vue'

function deleteHeader(){
//....
}

provide('deleteHeader',deleteHeader)

</script>

在搜索组件中:

<script setup>
import { inject } from 'vue'

const deleteHeader = inject('deleteHeader')

//then you could run it like `deleteHeader` instead of emit('emitDelet')
</script>

Vue.js相关问答推荐

为什么发送 POST API 请求时主体对象没有react ?

纵横比元素溢出容器

使用 cypress 进行 e2e 测试的 vuejs 期间出现 Webpack 错误

在 VueJS 中为 Get、Post、Patch 配置全局标头的最佳方法

指定一个 vue-cli vue.config.js 位置

判断 vue-router.beforeEach 不限制对路由的访问

为什么组件在 v-if 下没有被销毁

在基于 TypeScript 的 Vue 中将 vuex 状态和Mutations绑定到复选框组件属性

Vuetify v-select 组件宽度变化

如何在某些异步数据(在 Vuex 存储中)加载之前防止任何路由?

如何在 NPM 上创建和发布 Vuejs 组件

Vue 动态组件事件绑定

这是 v-on:change 的正确用法吗?

重新加载页面正在 vue 组件中的插槽上闪烁内容

在 nuxt.js 页面中包含外部 javascript 文件

Vue js在列表中添加动态字段,删除和排序不起作用

在 Vue 单元测试中单击按钮时触发表单提交

如何在我的 vue js 中实现无限滚动

Vue.js 无法读取 null 的属性 length长度

隐藏特定标题及其在 vuetify 数据表中的对应列