You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Vue单文件组件中获取app对象以注册自定义元素?

方案1:组件内直接配置编译器选项(Vue 3 + 常规script写法,优先推荐)

你不需要获取全局app实例,Vue 3支持在单文件组件的组件选项中直接声明compilerOptions,该配置仅对当前组件生效,完全符合你仅在当前文件管理自定义元素规则的需求:

<script>
export default {
  compilerOptions: {
    isCustomElement: tag => tag === 'gcse:searchresults-only'
    // 如果你有多个gcse前缀的自定义元素,也可以写成匹配前缀的形式
    // isCustomElement: tag => tag.startsWith('gcse:')
  },
  // 其余组件逻辑
}
</script>

方案2:script setup语法适配

如果你用的是<script setup>语法糖,只需要在同文件新增一个普通script块声明配置即可:

<!-- 普通script块仅用于声明编译器配置 -->
<script>
export default {
  compilerOptions: {
    isCustomElement: tag => tag.startsWith('gcse:')
  }
}
</script>

<script setup>
// 你的业务逻辑代码
</script>

方案3:全版本兼容写法(Vue 2/3通用,无需修改配置)

如果你用的是基于Vue 2的旧版Gridsome,没有组件级compilerOptions配置,直接用动态组件语法渲染即可,Vue会自动跳过组件解析,将其识别为原生自定义元素:

<template>
  <component :is="'gcse:searchresults-only'" />
</template>

Gridsome全局配置方案(仅当多个组件用到该元素时使用)

如果后续你有多个组件需要用到gcse系列自定义元素,可以在Gridsome配置中全局设置,在项目根目录的gridsome.server.js中添加如下配置:

module.exports = function (api) {
  api.chainWebpack(config => {
    config.module
      .rule('vue')
      .use('vue-loader')
      .tap(options => {
        options.compilerOptions = {
          ...options.compilerOptions,
          isCustomElement: tag => tag.startsWith('gcse:')
        }
        return options
      })
  })
}

内容的提问来源于stack exchange,提问作者Nick S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:06:01