jquery - 渲染 vueJs 后重新编译模板
问题描述
我正在使用带有 vueJs 的数据表 jQuery 插件,但是当我使用数据表的渲染功能时遇到问题。如果我将 vueJs 代码放入其中,例如 @click,它不会被解释,并且我在源代码中看到 @click 并没有发生任何事情。
我创建了一个组件 Datatable 并像这样实例化
<Datatable v-if="!loading" :source="source" :columns="columns" :searching="searching"></Datatable>
source 是这样的数组
[["1","138","415-CS-92","8","1"],["1","138","415-CS-92","8","1"]]
和 columns 是这样的数组
[
{ title: "foo" },
{ title: "foo2" },
{ title: "foo3" },
{ title: "foo4" },
{ title: "foo5" ,
render: function(data, type, row, meta) {
return '<a @click="test">' + data +' <i class="fa fa-edit "></i></a>';
}
}
]
问题就在那里,渲染函数返回@click指令而不编译它
数据表组件模板
<template>
<div>
<table class="display" style="width:100%">
</table>
</div>
</template>
脚本:
export default {
props: ['source', 'columns', 'searching'],
data () {
return {
datatable: {}
}
},
mounted: function () {
var the = this
the.$nextTick(function () {
this.datatable = $($(this.$el).find('table')).DataTable({
data: the.source,
columns: the.columns,
searching: the.searching
});
})
},
watch: {
'source': {
handler: function(val, oldVal) {
var the = this
the.$nextTick(function () {
this.datatable.destroy()
this.datatable = $($(this.$el).find('table')).DataTable({
data: the.source,
columns: the.columns,
searching: the.searching
});
})
},
deep: true
}
}
}
提前致谢
解决方案
jQuery DataTables 不是 Vue 原生组件;因此,它不是被动的。这意味着您无法连接代码中显示的“@click”事件。(除非您在创建阶段执行此操作,否则这可能是导致此问题的原因,您无法在后续阶段重新连接事件。)
(无耻插件)查看我的示例 Vue 组件,了解如何处理带有data-action
属性的点击:https ://github.com/niiknow/vue-datatables-net
它使用 jQuery 处理点击,然后将事件(名称定义为 data-action 属性)传播/$emit 到 Vue 组件。
推荐阅读
- r - 列表中对象的动态命名
- c# - 绑定后保持按钮状态不起作用
- python - 使用 Pandas 在现有的大型 CSV 文件中插入一列,而不会消耗太多 RAM
- kubernetes - 遥测混频器日志
- cassandra - ScyllaDB - [无效查询] 消息 =“封送错误:毫秒长度超出预期 (6)”
- java - 为我的项目创建像 Slf4j 这样的注释
- terraform - 使用 for_each 创建的资源中带有 for_each 的动态块
- html - 如何使 div 填充绝对底部 div 的剩余空间
- android - 在 LG K20 上从 apk 安装应用程序时出现问题
- r - 将多个图像组合在一起