目前我将一些参数传递给vue组件
<Slider
:images= "['/img/work/slide2.png', '/img/work/slide2.png', '/img/work/slide3.png']"
:html="['<div>hello</div>', '<div>goodbye</div>']"
</Slider>
滑块是&#39; html&#39;滑块或带图像的滑块。
这很好用,虽然我传入的html会变得更复杂,可能会有30行,这将更难以读取和管理为params。
我可以传入外部引用并将其拉入组件吗?
<div v-for="content in html">
<div class="work-slide">{{ content }}</div>
</div>
正如您所看到的,组件中的循环是一个非常简单的v-for。
答案 0 :(得分:12)
不要使用属性传递HTML,而是使用Slots:
假设我们有一个名为my-component的组件,其中包含以下模板:
<div> <h2>I'm the child title</h2> <slot> This will only be displayed if there is no content to be distributed. </slot> </div>
使用该组件的父级:
<div> <h1>I'm the parent title</h1> <my-component> <p>This is some original content</p> <p>This is some more original content</p> </my-component> </div>
渲染结果为:
<div> <h1>I'm the parent title</h1> <div> <h2>I'm the child title</h2> <p>This is some original content</p> <p>This is some more original content</p> </div> </div>
如果您想传递包含HTML的多个字段,也可以使用Named Slots。
答案 1 :(得分:1)
几个月前我在一个项目中遇到了类似的问题。我修复了它以 base64 格式传递 HTML 代码。
我的父组件:
<wysywyg id="ssaasa" :bal="to64('<strong>Me</strong>')"></wysywyg>
我的方法:
methods: {
to64(html) {
return btoa(html)
}
}
我的组件:
<template>
<div class="RenderHTMLEditor mx-3">
<label class="subtitle-1 pb-3">{{label}}</label>
<textarea html="true" v-model="to64"
width="100%"
:style="'height:'+height+'px;'"
wysywyg="true"
:name="id" :id="id"
class="tinywy">
</textarea>
</div>
</template>
<script>
export default {
props: ['label', 'id', 'height', 'bal'],
data: function() {
return {
}
},
computed: {
to64: function() {
return atob(this.bal)
}
},
mounted: function() {
window.initWy(this.id)
}
}
</script>
<style scoped>
.RenderHTMLEditor {
width: 100%;
}
</style>
答案 2 :(得分:0)
您可以使用v-html directive将原始html注入Vue组件中。