vitepress icon indicating copy to clipboard operation
vitepress copied to clipboard

怎样将mardown文件Frontmatter中的参数传递到data loaders中

Open huluobotx opened this issue 2 years ago • 5 comments

Is your feature request related to a problem? Please describe.

我想要复用一个data loader,在不同的markown文件中都导入它,它里面的逻辑是一样的,但是不同的markdown文件中导入时会有参数变化。 我想要从服务器加载数据,在不同的markdown文件中利用数据加载器时,fetch地址中的参数是不一样的,我想要把markdown文件中导入的data loader的fetch的参数写到Frontmatter中,但是我不知道如何传递给data loader

Describe the solution you'd like

是否可以像vue3的组合式函数一样,在data loader中导出函数,通过导出函数来传递参数到data loader中

Describe alternatives you've considered

No response

Additional context

No response

Validations

huluobotx avatar Aug 28 '23 03:08 huluobotx

没有太理解你说的 Data Loader 是什么。是 CMS 的 ContentLoader 吗?

如果是你项目中的一个概念的话,我想你需要的是能访问 frontmatter 的 API?是的话,你可以直接用 useData()

<script setup>
import { useData } from 'vitepress'

const { frontmatter } = useData()
</script>

<template>
  <h1>{{ frontmatter.someDataLoaderParams }}</h1>
</template>

nekomeowww avatar Sep 02 '23 07:09 nekomeowww

没有太理解你说的 Data Loader 是什么。是 CMS 的 ContentLoader 吗?

如果是你项目中的一个概念的话,我想你需要的是能访问 frontmatter 的 API?是的话,你可以直接用 useData()

<script setup>
import { useData } from 'vitepress'

const { frontmatter } = useData()
</script>

<template>
  <h1>{{ frontmatter.someDataLoaderParams }}</h1>
</template>

不是的,是 .data.js文件,我在多个地方import同一个.data.js文件,为了复用.data.js文件中的逻辑,但是不同的地方import时又需要把变量传递到.data.js文件中,在.data.js文件中无法使用useData,我试过import.meta和globarThis也不能够传递变量到.data.js文件中,现在我不知道有什么办法可以把变量传递到.data.js文件中

huluobotx avatar Sep 04 '23 01:09 huluobotx

ref: https://github.com/vuejs/vitepress/issues/2637

是指这个吗?

Zhengqbbb avatar Sep 04 '23 02:09 Zhengqbbb

ref: #2637

是指这个吗?

不是这个,在文档中.data.js文件被称为data loader 2023-09-04_141843

huluobotx avatar Sep 04 '23 06:09 huluobotx

Same problem. Looking for a walkaround... 🙏

peterroe avatar Nov 24 '23 08:11 peterroe