now*_*wox 7 javascript vue.js prismjs vuejs-slots
我有一个组件 ( prism-editor),它只从 中获取代码v-model="code"。这意味着,代码必须通过以下方式发送到组件code:
<template>\n <prism-editor class="my-editor" v-model="code" \n :highlight="highlighter" :line-numbers="numbers"/>\n</template>\n\n<script> \n import { PrismEditor } from 'vue-prism-editor';\n\n export default {\n components: {\n PrismEditor,\n },\n data: () => ({\n code: this.$slots,\n numbers: true\n }),\n }\n</script>\nRun Code Online (Sandbox Code Playgroud)\n我想从一个Code由插槽命名的父组件绑定它:
<template>\n <code language="c">\n int main() {\n printf('Hello World!');\n }\n </code>\n<template>\n\n<script>\n import Code from 'code.vue'\n export default {\n components: {\n 'code': Code\n }\n }\n</script>\nRun Code Online (Sandbox Code Playgroud)\n在我的Code组件中,我必须找到一种方法来获取槽数据并将其直接传递到code要发送到v-model='code'. 不幸的是,以下内容不起作用,因为我不知道如何从父级获取数据slot:
data: () => ({\n code: this.$slots // Which obviously doesn't work...\n})\nRun Code Online (Sandbox Code Playgroud)\n换句话说,我只想获取标签内发送的所有原始内容code:
<code>all this content...</code>`\nRun Code Online (Sandbox Code Playgroud)\n这可能吗?
\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Code.vue\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Page.vue\nRun Code Online (Sandbox Code Playgroud)\n
很好的问题,为了解决这个问题,您必须进入 Vuejs 下面的一层,并使用textContentDOM API 中的属性[在此处阅读更多内容]
使用此属性,您可以访问 DOM 元素内部的内容,因此在您的情况下,它会类似于:
/*
* Template
*/
<div ref="mySlot">
<slot></slot>
</div>
/*
* Javascript
*/
this.$refs.mySlot.textContent;
Run Code Online (Sandbox Code Playgroud)
我在 Codesandbox 中为您设置了一个很好的示例:
https://codesandbox.io/s/gallant-resonance-7unn2?file=/src/components/Code.vue
对于未来的挑战:
总是尝试看看是否可以用纯 Javascript 解决它。快乐的编码伙伴;
| 归档时间: |
|
| 查看次数: |
10222 次 |
| 最近记录: |