在 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 来解决它。快乐的编码伙伴;
我有一个组件 (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 来解决它。快乐的编码伙伴;