在 Vue 中获取插槽数据作为变量?

Get slot data as a variable in Vue?

我有一个组件 (prism-editor) 只从 v-model="code" 获取代码。这意味着,代码必须通过 code:

发送到组件

Code.vue

<template>
  <prism-editor class="my-editor" v-model="code" 
    :highlight="highlighter" :line-numbers="numbers"/>
</template>

<script>  
  import { PrismEditor } from 'vue-prism-editor';

  export default {
    components: {
      PrismEditor,
    },
    data: () => ({
        code: this.$slots,
        numbers: true
    }),
  }
</script>

我想从插槽中名为 Code 的父组件绑定它:

Page.vue

<template>
    <code language="c">
        int main() {
            printf('Hello World!');
        }
    </code>
<template>

<script>
  import Code from 'code.vue'
  export default {
    components: {
      'code': Code
    }
  }
</script>

在我的 Code 组件中,我必须找到一种方法来获取插槽数据并将其直接传递给 code 变量以发送到 v-model='code'。不幸的是,以下内容不起作用,因为我不知道如何从父 slot:

获取数据
data: () => ({
    code: this.$slots // Which obviously doesn't work...
})

换句话说,我只想获取在 code 标签内发送的所有原始内容:

<code>all this content...</code>`

这可能吗?

.
├── Code.vue
└── Page.vue

很好的问题,为了解决这个问题,您必须在 Vuejs 下面一层,并使用 DOM API[= 中的 属性 textContent 12=]

使用此 属性 您可以访问 DOM 元素内的内容,因此在您的情况下它类似于:

/*
 * Template
 */
<div ref="mySlot">
  <slot></slot>
</div>

/*
 * Javascript
 */
this.$refs.mySlot.textContent;

我在 Codesandbox 中为您设置了一个很好的示例:

https://codesandbox.io/s/gallant-resonance-7unn2?file=/src/components/Code.vue

未来的挑战:

总是尝试看看你是否可以用纯 Javascript 来解决它。快乐的编码伙伴;