layui结合后端语言实现菜单渲染

注意:接口渲染的时候 一定要防止动态化的问题

layui.use(['element'],function(){
    var element = layui.element;


//初始化动态元素,一些动态生成的元素如果不设置初始化,将不会有默认的动态效果
element.init();

例子:
我使用了layui中的menu结构,这个结构一般来说使用Java、php进行结合,php的话页面可以混用,Java就不行了,Java中是用呢ajax进行接口获取使用之后,进行菜单渲染

渲染完成之后,没有动态效果,那么需要element进行设置

html相关代码

<div class="layui-side layui-side-menu">
    <div class="layui-side-scroll">
      <div class="layui-logo" lay-href="home/console.html">
        <span>管理后台</span>
      </div>
      
      <ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-menu" lay-filter="layadmin-system-side-menu">
        
        <span class="layui-nav-bar"></span>
      </ul>
    </div>
</div>

js相关代码

window.menu = '';
  layui.use(['index','layer', 'form','element'],function(){
    var layer = layui.layer,$ = layui.$, element = layui.element;
    $.ajax({
      url:'/user/functionList',
      data:{},
      type:'get',
      dataType:'json',
      async:false,
      success:function(result){
        var menuStr = result.data;
        menuChildren(menuStr,1,true);
        $("#LAY-system-side-menu").append(menu);
        //初始化动态元素,一些动态生成的元素如果不设置初始化,将不会有默认的动态效果
        element.init();
      }
    });
  })
  
  /**
   * 根据级别 最高级别三级
   * @param menuStr
   * @param level
   */
  function menuChildren(menuStr, level, order){
    $.each(menuStr, function(i, item){
      if(level == 1){
          menu += '<li data-name="'+item.name+'" class="layui-nav-item">\n' +
                  '<a href="javascript:;" lay-tips="'+item.name+'" lay-direction="'+item.children.length+'">\n' +
                  '                <i class="layui-icon layui-icon-app"></i>\n' +
                  '                <cite>'+item.name+'</cite>\n' +
                  '              <span class="layui-nav-more"></span>\n</a>\n';
        menuChildren(item.children, 2, true);
      }else if(level == 2){
        if(item.children.length>0){
          menu += '<dl class="layui-nav-child">\n' +
                  ' <dd data-name="content">\n' +
                  '   <a href="javascript:;">'+item.name+'<span class="layui-nav-more"></span></a>\n' +
                  '     <dl class="layui-nav-child">\n';
          menuChildren(item.children, 3, true);
        }else{
            menu += '<dl class="layui-nav-child">\n' +
                    '<dd class="layui-nav-itemed">\n' +
                    '<a lay-href="'+item.url+'">'+item.name+'</a>\n' +
                    '</dd>\n';
          menuChildren(item.children, 3, false);
        }
      }else{
        menu += '<dd data-name="'+item.name+'"><a lay-href="'+item.url+'">'+item.name+'</a></dd>\n';
      }
    });
    if(level == 1){
      menu += '</li>';
    }else if(level == 2){

    }else if(level == 3){
      if(order){
        menu += '</dl>\n</dd>\n</dl>\n';
      }else{
        menu += '</dl>\n';
      }
    }
  }

 

数据结构体(java/php/其他语言) json数据结构

{"code":0,"message":"成功","data":[{"id":1,"name":"权限管理","parentId":0,"url":null,"children":[{"id":2,"name":"用户列表","parentId":1,"url":"user/index","children":[{"id":5,"name":"test","parentId":2,"url":"test/test","children":[]}]},{"id":3,"name":"角色列表","parentId":1,"url":"role/index","children":[]},{"id":4,"name":"菜单列表","parentId":1,"url":"function/index","children":[]}]}]}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你的数据中包含一个列表,你可以通过两种方式来获取这个列表中的数据: 1. 直接在 field 中指定列表的属性名来获取数据。 例如,如果你的数据中有一个名为 `list` 的列表,你可以在 field 中这样指定: ```js var table = layui.table; table.render({ elem: '#test', url: '/demo/table/user/', cols: [[ {field:'id', title:'ID', width:80}, {field:'username', title:'用户名', width:120}, {field:'email', title:'邮箱', width:150}, {field:'list', title:'列表', templet:'#listTpl'} ]] }); // 列表的模板 <script type="text/html" id="listTpl"> {{# layui.each(d.list, function(index, item){ }} <span>{{ item }}</span> {{# }); }} </script> ``` 其中 `d.list` 就是获取到的列表数据,通过 `layui.each` 方法遍历列表并渲染到模板中。 2. 在 done 回调函数中获取列表数据。 在渲染完成后的 done 回调函数中,可以通过 `res` 参数来获取到服务端返回的完整数据,包括列表数据。你可以通过 `res.list` 来获取列表数据,然后对列表数据进行处理和渲染。 示例代码: ```js var table = layui.table; table.render({ elem: '#test', url: '/demo/table/user/', cols: [[ {field:'id', title:'ID', width:80}, {field:'username', title:'用户名', width:120}, {field:'email', title:'邮箱', width:150}, {field:'list', title:'列表', templet:'#listTpl'} ]], done: function(res, curr, count) { // 获取列表数据 var listData = res.list; // 对列表数据进行处理和渲染 // ... } }); // 列表的模板 <script type="text/html" id="listTpl"> {{# layui.each(d.list, function(index, item){ }} <span>{{ item }}</span> {{# }); }} </script> ``` 以上两种方式都可以获取到数据中包含的列表数据,并进行处理和渲染。 ### 回答2: 在使用layui获取后端数据渲染表格,通过field读取data中的数据时,可以通过遍历列表来获取包含在data中的列表。 首先,从后端获取到的数据应该是一个包含列表的对象,我们可以将该对象存储在一个变量中,例如叫做dataList。 然后,我们可以使用layui的table模块进行表格的渲染。在渲染表格的时候,需要将dataList传递给table模块的data属性,示例如下: ``` layui.use(['table'], function(){ var table = layui.table; table.render({ elem: '#tableDemo', data: dataList, // 将dataList传递给data属性 cols: [[ {field: 'id', title: 'ID'}, {field: 'name', title: '姓名'}, ... ]] }); }); ``` 在上面的示例中,dataList被传递给了table.render方法中的data属性,这样在渲染表格时,layui就会根据dataList中的数据自动渲染出表格。 接下来,我们可以通过field读取dataList中的列表数据。在cols属性中,我们可以定义每一列的field属性,示例如下: ``` cols: [[ {field: 'id', title: 'ID'}, {field: 'name', title: '姓名'}, {field: 'list', title: '列表', templet: '#listTpl'} // 列表列的定义 ]] ``` 在上面的示例中,我们定义了一个名为列表的列,其field属性为list。根据dataList中的数据结构,该列的数据应该是一个包含列表的对象,我们可以通过在表格中使用template模板来将该列表数据展示出来。 在HTML代码中,我们可以在表格中定义一个id为listTpl的模板,示例如下: ``` <script type="text/html" id="listTpl"> <ul> {{# layui.each(d.list, function(index, item){ }} <li>ID:{{ item.id }},姓名:{{ item.name }}</li> {{# }) }} </ul> </script> ``` 在上面的示例中,我们使用layui.each方法遍历列表d.list中的每一个对象,并将其信息以列表项的形式展示出来。 通过以上步骤,我们就可以使用layui获取后端数据渲染表格,并通过field读取data中包含的列表数据,将其展示在表格当中。 ### 回答3: 在使用layui获取后端数据渲染表格时,如果需要读取数据中包含的列表,可以通过以下步骤进行处理: 1. 首先,确保后端接口返回的数据中包含了一个列表,可以将这个列表看作是一个二维数组。 2. 在前端页面中使用layui的表格组件进行表格的渲染,同时定义表格的列属性(field)。 3. 在定义每个列的属性时,可以使用嵌套对象的方式来访问数据中的列表,例如:field: 'list[0].属性名',这里的0表示需要获取列表中的第一个元素。 4. 在渲染表格时,layui会自动根据定义的列属性来读取对应的数据,并显示在表格中。 5. 当需要获取数据中的整个列表时,可以通过访问data字段来获取,例如:data.list。 需要注意的是,在使用layui渲染表格时,数据的格式比较重要,需要与layui的表格组件要求的数据格式保持一致,才能正确地渲染和读取数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值