javascript - 获取Vue中组件标签的内容
问题描述
我刚开始玩 Vue。我想做这样的事情:
<snippet name="Select From Table">
SELECT *
FROM database.table
</snippet>
并让它产生一个链接,当单击该链接时,它会调用一个可以访问 SQL 的函数。
我尝试使用一个组件,但我不知道如何在 click 函数中获取 SQL,以便我可以使用它。Slots 看起来很有趣,但这似乎只在标签内部起作用,而不是在属性中起作用。
谢谢!
解决方案
如果要获取插槽的内容,则必须循环this.$slots.slotName
然后获取所需的 innerText 或 innerHtml。
PS:正如@Terry 提到的,允许客户端执行任何 SQL 命令将是一个巨大的安全风险。
就像下面的演示:
Vue.component('v-test',{
template:`
<div>
<a @click.stop="addText()">{{current}}</a>
</div>
`,
data () {
return {
current: 'Bla'
}
},
methods: {
addText: function () {
this.current += 'Bla'
}
}
})
Vue.component('snippet',{
template:`
<div style="border: 1px solid grey" @click="getHtml()">
<slot></slot>
</div>
`,
methods: {
getHtml: function () {
alert(this.$slots.default && Object.values(this.$slots.default).map((item, index) => {
return item.elm && (item.elm.wholeText || item.elm.innerText)
}).join('\r\n'))
}
}
})
new Vue ({
el:'#app'
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id="app">
<div class="container">
<snippet>Test SQL ...</snippet>
<br>
<snippet><strong>Te<i>s<span>.</span></i>t</strong> SQL ...</snippet>
<br>
<snippet><strong>Test<v-test></v-test></strong> SQL ...</snippet>
</div>
</div>
另一种解决方案是使用ref
.
Vue.component('v-test',{
template:`
<div>
<a @click.stop="addText()">{{current}}</a>
</div>
`,
data () {
return {
current: 'Bla'
}
},
methods: {
addText: function () {
this.current += 'Bla'
}
}
})
Vue.component('snippet',{
template:`
<div style="border: 1px solid grey" @click="getHtml()" ref="test">
<slot></slot>
</div>
`,
methods: {
getHtml: function () {
alert(this.$refs.test.innerText)
}
}
})
new Vue ({
el:'#app'
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id="app">
<div class="container">
<snippet>Test SQL ...</snippet>
<br>
<snippet><strong>Te<i>s<span>.</span></i>t</strong> SQL ...</snippet>
<br>
<snippet><strong>Test<v-test></v-test></strong> SQL ...</snippet>
</div>
</div>
推荐阅读
- sql - 无法查看创建的分区
- git - 将存储库推送到 Github 时权限被拒绝
- python - 将标签添加到 tkinter 网格的顶部?
- javascript - fullcalendar 并非所有事件都显示在议程周视图中
- r - 带有模型矩阵输入的惩罚因子
- python - 我可以将变量挂钩到自定义非处理块吗?
- javascript - 如果字符串存在于javascript中的其他元素中,我想从字符串数组中删除一个元素
- vue.js - 如何使用 dom-to-image 库在服务器 vuejs 中发送图像?
- php - WordPress:将级别指示器添加到类别列表
- groovy - 在groovy中将字符串日期转换为日期格式时出现问题: