vue和layui共用时js加载顺序的问题

深究之前先声明一个问题,
layui是基于jquery直接操控dom的
而vue是操控虚拟dom的,虚拟dom不理解的可以参考一下这篇文章
深究vue核心之虚拟DOM(vdom)
深究Javascript的加载与执行顺序
希望看到此篇博文的人先去看一下这两篇文章,以便你理解我在说什么.

直接写大坑描述.
最近写完的一个项目里, 纯html css js写的一个后台, 用的vue.js+layui.js ,属实是恶心到了我
很多页面的select下拉,radio单选 复选, 总之的总之,只要涉及到layui的form表单回显加载的问题, 都有可能出现偶发性的加载不出来的问题
如同这种
在这里插入图片描述
打开F12,查看标签以及ajax, 有数据返回!! 这个option标签是用vue的 v-for循环出来的下拉
再如下这种
偶发性渲染失败时
偶发性渲染失败
渲染成功时
在这里插入图片描述
共同点是两者都是有返回数据的,都是用的v-for循环
不同点是到html上面时,解析没有渲染出来
思考了一下, 应该是vue 和 layui实例的加载顺序问题

举几个错误的实例顺序写法(如果服务器带宽足够,则错误不成立)

layui.use(['layer', 'form', 'tree'], function () {
    var layer = layui.layer,
        form = layui.form,
        tree = layui.tree;
    //自定义验证规则
    form.verify({
        addDepartment: function (value) {
            var han = /[\u4e00-\u9fa5]/g;
            if (value.length > 10) {
                return '部门名称不得超过10个字';
            }else if (!han.test(value)) {
                return '请输入汉字作为部门名称';
            }
        },
        sort: function (value) {
            if (value.length == 0) {
                return '请输入排序编码';
            } else if (value.length > 20) {
                return '标题长度不得大于20个字!';
            }
        },
    });

    //监听提交
    form.on('submit(subBtn)', function (data) {
        var datas = {
            name: data.field.name,
            sort: data.field.sort,
            parentId: data.field.parentId,
        };
        vm.submitForm(datas);

    });
    form.render();
});
var vm = new Vue({
    el: '#open_cn',
mounted() {
        var _this = this;
        //_this.getList();
        layui.use(['layer', 'form', 'tree'], function () {
            var layer = layui.layer,
                form = layui.form,
                tree = layui.tree;
            //自定义验证规则
            form.verify({
                addDepartment: function (value) {
                    var han = /[\u4e00-\u9fa5]/g;
                    if (value.length > 10) {
                        return '部门名称不得超过10个字';
                    }else if (!han.test(value)) {
                        return '请输入汉字作为部门名称';
                    }
                },
                sort: function (value) {
                    if (value.length == 0) {
                        return '请输入排序编码';
                    } else if (value.length > 20) {
                        return '标题长度不得大于20个字!';
                    }
                },
            });

            //监听提交
            form.on('submit(subBtn)', function (data) {
                var datas = {
                    name: data.field.name,
                    sort: data.field.sort,
                    parentId: data.field.parentId,
                };
                vm.submitForm(datas);

            });
            form.render();
        });
        _this.getDepartment();
    },

亦或者把layui实例放在created周期里面
以上这三种写法,在服务器带宽不足的时候,vue.js jq.js layui.js加载过慢或者失败的时候,页面里面要么就是一片空白,要么循环出来的标签循环失败,属于偶发性的bug,还有一点,有时间的同学可以去深扒一下两者共用时页面的性能问题,我觉得好不到哪去.
**

解决

  1. ajax成功的回调里面,数据赋值加settimeout延时器,200或者300ms都可以
if (res.code == 0) {
	setTimeout(() => {
		_this.typeList = res.data
	}, 200);
					
} else {
	layer.msg(res.msg, {
		icon: 2
	});
}
  1. 将layui的实例放在updated周期里面重新的加载一次
updated: function () {
		layui.use(['form'], function () {
			layui.form.render();
		});
	},

虽然我知道这两种写法很垃圾,但是没办法,这次混合用完之后,不会再混合用了

最后附一句:layui和vue混用的时候不要用v-model !!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
VueLayui是两个不同的前端框架,它们有一些区别和特点: 1. 架构和特性:Vue是一个渐进式的JavaScript框架,用于构建用户界面,它提供了数据驱动的组件化架构,具有双向数据绑定、虚拟DOM、组件化开发等特性。Layui是一个轻量级的前端UI框架,提供了一套简洁易用的UI组件和丰富的页面布局工具。 2. 生态系统:Vue拥有一个庞大的生态系统,包括插件、工具库、社区支持等,提供了丰富的扩展和解决方案。Layui相对于Vue而言,生态系统相对较小,主要集中在其自身提供的组件和工具上。 3. 学习曲线:Vue相对来说学习曲线较为平缓,官方文档详细且易于理解,同也有很多社区资源和教程可供参考。Layui的学习曲线相对较陡,文档相对简洁,对于前端开发经验较少的人来说可能需要更多的学习和实践间。 4. 社区和支持:Vue拥有一个活跃的社区,并得到了广泛应用和支持,有很多第三方库和插件可供选择。Layui的社区相对较小,可选择的第三方资源相对较少。 5. UI组件:Vue本身并没有提供完整的UI组件库,但有很多第三方UI组件库可供选择,如Element UI、Vuetify等。而Layui提供了一套完整的UI组件库,包含了常用的组件和样式。 综上所述,Vue更适合构建复杂的单页面应用和大型项目,拥有更庞大的生态系统和更广泛的社区支持;而Layui则适合快速搭建简单的页面和基础的UI需求,对于小型项目和对框架要求不高的项目来说更为合适。选择哪个框架取决于你的具体需求和项目规模。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李泽举

如对你有帮助,那我就没白写

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值