关于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;
? }
}

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

您可能感兴趣的文章:
  • AngularJS实现树形结构(ztree)菜单示例代码
  • 实例详解AngularJS实现无限级联动菜单
  • AngularJS折叠菜单实现方法示例
  • AngularJS实现的select二级联动下拉菜单功能示例
  • Angular.js与Bootstrap相结合实现手风琴菜单代码
  • AngularJS动态菜单操作指令
  • AngularJS+Bootstrap3多级导航菜单的实现代码
  • AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
  • Angular.JS实现无限级的联动菜单(使用demo)
  • angularjs+bootstrap菜单的使用示例代码

转载请注明出处:http://www.dannyxu.com/article/20230526/5025.html

随机推荐

  1. Angular开发准备2

    Angular开发准备2 在Angular中引入第三方...

  2. angular select 默认值设置方法

    如下所示: select ng-model="selected" ng-options="x.id as x.name for x in users"/select $scope.users = [ {name:'a',...

  3. angular入门篇3----购物车添加

    Angular入门3 购物车组件 我们先把项目的内容丰富一下。 1.创建购物车功能 Store/src/app/model下,创建: cart.model.ts import { Injectable } from"@angular/co...

  4. Angular懒加载动态创建显示该模块下声明的组件

    目录环境: Angular 13.x.x新建一个angular项目懒加载工具栏组件toolbar.module.tstoolbar.component.tstoolbar.component.htmlapp.component.ts环境:...

  5. Angular @HostBinding()和@HostListener()用法

    @HostBinding()和@HostListener()在自定义指令时非常有用。@HostBinding()可以为指令的宿主元素添加类、样式、属性等,而@HostListener()可以监听宿主元素上的事件。 @HostBinding...

  6. 前端框架学习总结之Angular、React与Vue的比较详解

    近几年前端的技术发展很快,细分下来,主要可以分成四个方面: 1.开发语言技术,主要是ES67,coffeescript,typescript等; 2.开发框架,如Angular,React,Vue.js,Angular2等; ...

  7. 浅谈Angular文字折叠展开组件的原理分析

    自己写了个Angular的文字折叠组件,这种组件其实很多地方都能用到效果如下 展开后的效果 折叠后的效果 先放全部代码,使用的时候只需要把自己需要展现的文字{{designer.des}}替换成自己所在路由器所需要绑定...

  8. Angular 通过注入 $location 获取与修改当前页面URL的实例

    以下获取与修改的 URL 以 ( http://172.16.0.88:8100/#/homePageid=10a=100 ) 为例 【一】获取 (不修改URL) //1.获取当前完整的url路径 var absurl = $loc...

  9. Angular设置别名alias的方法

    设置别名 在根目录下tsconfig.json中添加baseUrl和paths { "compilerOptions": { "baseUrl": "src", "paths": { "@app/*": ["app/...

  10. 如何以Angular的姿势打开Font-Awesome详解

    前言 本文主要给大家介绍了关于以Angular的姿势打开Font-Awesome的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 环境 Angular: v5.2.9 Font-Awesome: v...