Angluar+zorro实现无限级菜单

 更新时间:2022年03月25日 15:57:42   作者:武中奇  
这篇文章主要为大家详细介绍了Angluar+zorro实现无限级菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

关于Angular + zorro 实现无限级菜单,供大家参考,具体内容如下

该文章为思路+代码,为通用式前端无限级菜单。

首先通过后台接收到的数据是这样的

"table":[
    {
    "id": 1017.0,
    "menuName": "用户管理",
        "child":[{
            "id": 23.0,
            "menuName": "用户维护",
            "child": [{
                    "id": 24.0,
                    "menuName": "用户查看",
                    "child":[{
                               "id": 25.0,
                            "menuName": "用户增加",
                               "child":[]
                    }]
                },
                {
                    "id": 25.0,
                    "menuName": "用户增加",
                    "child":[]
                }
            ]
        }]
    },
    {
    "id": 1018.0,
    "menuName": "微信管理",
    "child":[]    
    }
]

实现步骤如下:

1. uc-home.component.html

<!--
strHtml : 需要展示的数据
innerhtmlpipe :添加管道,让数据拥有样式
-->
<div [innerHTML]="strHtml | innerhtmlpipe"></div>

2. 因为通过在component.ts进行数据拼接传到页面样式不会显示,所以使用Angular提供的管道让其有样式。

2.1新建一个管道

命令: ng g pipe innerhtmlpipePipe

2.2.

innerhtmlpipePipe.pipe.ts

import { Pipe, PipeTransform } from '@angular/core';
import {DomSanitizer} from '@angular/platform-browser';

@Pipe({
  name: 'innerhtmlpipe'
})
export class InnerhtmlpipePipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {}
  transform(value): any {
      //样式
    return this.sanitizer.bypassSecurityTrustHtml(value);
  }

}

3.uc-home.component.ts

import {Component, OnInit, ChangeDetectorRef} from '@angular/core';
import {Router, NavigationEnd} from '@angular/router';


@Component({
  selector: 'nb-uc-home',
  templateUrl: './uc-home.component.html',
  styleUrls: ['./uc-home.component.scss'],
  animations: [slideInAnimation]
})

export class UcHomeComponent implements OnInit {
    //定义一个 strHtml
    public  strHtml;
    //数据
    public menuArray = [];
    
     constructor(
         private homeService: HomeService,
         private ref: ChangeDetectorRef
     ) {}
    ngOnInit() {
           //从后台接口获取数据,赋值给menuArray
   this.homeService.getMenu().subscribe(data => {
       //赋值数据
        this.menuArray = data.table;
           //初始化页面
        this.strHtml = '';
       //遍历每一个数据
  for (let i = 0; i < this.menuArray.length; i++) {
      
        const arr = this.menuArray[i];
//开始拼接页面
        this.strHtml += '<ul nz-menu [nzMode]="\'inline\'" style="height:auto" >';
          this.strHtml +='<li nz-submenu>';
        this.strHtml += '<div menuEvent title>';
        this.strHtml +='<span type="laptop">' + arr.menuName + '</span>' ;
          this.strHtml +='</div>';
      //遍历到孩子的时候调用一个方法,循环把孩子全部遍历出来
        this.strHtml += this.creatHtml(arr.child);
        this.strHtml += '</li>';
          this.strHtml += '</ul>';
      }
        //数据加载完毕之后重新渲染页面
             this.ref.markForCheck();
      });      
    }

    
 creatHtml(cArr): any {
    let str = '';
    for (let i = 0; i < cArr.length; i++) {
      str += '<ul>';
      str += '<li nz-menu-item';
      str += '<div menuEvent>';
      str += '<span>' + cArr[i].menuName +'</span>';
      str += '</div>';
      str += '</li>';
      str += '</ul>';
    }
     //是否存在子集
    if (cArr.child) {
      str += this.creatHtml(cArr.child);
    }
    this.ref.markForCheck();
    return str;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Angular获取ngIf渲染的Dom元素示例

    Angular获取ngIf渲染的Dom元素示例

    这篇文章主要为大家介绍了Angular获取ngIf渲染的Dom元素示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 详谈angularjs中路由页面强制更新的问题

    详谈angularjs中路由页面强制更新的问题

    下面小编就为大家带来一篇详谈angularjs中路由页面强制更新的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 详解Angular2组件之间如何通信

    详解Angular2组件之间如何通信

    本篇文章主要介绍了详解Angular2组件之间如何通信,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 使用Angular自定义字段校验指令的方法示例

    使用Angular自定义字段校验指令的方法示例

    这篇文章主要介绍了使用Angular自定义字段校验指令的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 深究AngularJS——ng-checked(回写:带真实案例代码)

    深究AngularJS——ng-checked(回写:带真实案例代码)

    本篇文章主要介绍了深究AngularJS——ng-checked(回写:带真实案例代码),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 详解基于angular-cli配置代理解决跨域请求问题

    详解基于angular-cli配置代理解决跨域请求问题

    本篇文章主要介绍了详解基于angular-cli配置代理解决跨域请求问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 使用Angular.js开发的注意事项

    使用Angular.js开发的注意事项

    这篇文章主要记录了一些在学习和使用angular.js踩到的坑和需要注意的点,方便以后自己查阅,也给同样遇到这些问题的朋友们一些帮助,有需要的朋友们下面来一起看看吧。
    2016-10-10
  • AngularJs导出数据到Excel的示例代码

    AngularJs导出数据到Excel的示例代码

    本篇文章主要介绍了AngularJs导出Excel的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • AngularJs表单验证实例代码解析

    AngularJs表单验证实例代码解析

    这篇文章主要介绍了AngularJs表单验证实例代码解析,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • AngularJS实现的2048小游戏功能【附源码下载】

    AngularJS实现的2048小游戏功能【附源码下载】

    这篇文章主要介绍了AngularJS实现的2048小游戏,可实现通过键盘W、S、A、D键控制上下左右移动进行游戏的功能,涉及AngularJS页面元素动态操作及数值运算等相关操作技巧,并附带源码供读者下载参考,需要的朋友可以参考下
    2018-01-01

最新评论