VueJS在内联模板组件中重新编译HTML

VueJS re-compile HTML in an inline-template component

本文关键字:新编译 编译 HTML 组件 VueJS      更新时间:2023-09-26

我已经包装了bootstrapTable(https://github.com/wenzhixin/bootstrap-table)转换为指令,如以下所示:

Vue.directive('bootstraptable', {
    priority: 1000,
    params: ['url', 'resource-name'],
    bind: function () {
        var _self = this;
        $(this.el)
            .bootstrapTable({
                pagination: true,
                pageSize: 15,
                pageList: [],
                sidePagination: 'server',
                url: this.params.url,
                queryParams: function (params) {
                    return params;
                },
                cookie: true,
                cookieExpire: '24h',
                cookieIdTable: this.params.resourceName + '-table',
                locale: 'it-IT'
            }).on('load-success.bs.table', function (e, data) {
                $('[data-toggle="tooltip"]').tooltip();
                _self.vm.$compile(_self.vm.$el);
            });
    },
    update: function (value) {
        $(this.el).val(value)
    },
    unbind: function () {
        $(this.el).off().bootstrapTable('destroy')
    }
});

从服务器返回的JSON包含一个带有v-on指令的按钮,因此我必须重新编译注入的HTML行,以使按钮指令正常工作。无论如何,以下代码似乎不起作用:

_self.vm.$compile(_self.vm.$el);

我是不是错过了一些显而易见的东西?

$compile方法需要在必须编译的元素上调用,而不是在vm根元素上调用。

我改了行:

_self.vm.$compile(_self.vm.$el);

带有:

            _.each($('[recompile]'), function(el){
                _self.vm.$compile(el);
            });

并为所有需要重新编译的HTML元素添加了属性"recomplete"。

这似乎如预期的那样有效,如果有更传统的方法,请毫不犹豫地回答。