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; ? } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- 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
随机推荐
-
Angular开发准备2
Angular开发准备2 在Angular中引入第三方...
-
angular select 默认值设置方法
如下所示: select ng-model="selected" ng-options="x.id as x.name for x in users"/select $scope.users = [ {name:'a',...
-
angular入门篇3----购物车添加
Angular入门3 购物车组件 我们先把项目的内容丰富一下。 1.创建购物车功能 Store/src/app/model下,创建: cart.model.ts import { Injectable } from"@angular/co...
-
Angular懒加载动态创建显示该模块下声明的组件
目录环境: Angular 13.x.x新建一个angular项目懒加载工具栏组件toolbar.module.tstoolbar.component.tstoolbar.component.htmlapp.component.ts环境:...
-
Angular @HostBinding()和@HostListener()用法
@HostBinding()和@HostListener()在自定义指令时非常有用。@HostBinding()可以为指令的宿主元素添加类、样式、属性等,而@HostListener()可以监听宿主元素上的事件。 @HostBinding...
-
前端框架学习总结之Angular、React与Vue的比较详解
近几年前端的技术发展很快,细分下来,主要可以分成四个方面: 1.开发语言技术,主要是ES67,coffeescript,typescript等; 2.开发框架,如Angular,React,Vue.js,Angular2等; ...
-
浅谈Angular文字折叠展开组件的原理分析
自己写了个Angular的文字折叠组件,这种组件其实很多地方都能用到效果如下 展开后的效果 折叠后的效果 先放全部代码,使用的时候只需要把自己需要展现的文字{{designer.des}}替换成自己所在路由器所需要绑定...
-
Angular 通过注入 $location 获取与修改当前页面URL的实例
以下获取与修改的 URL 以 ( http://172.16.0.88:8100/#/homePageid=10a=100 ) 为例 【一】获取 (不修改URL) //1.获取当前完整的url路径 var absurl = $loc...
-
Angular设置别名alias的方法
设置别名 在根目录下tsconfig.json中添加baseUrl和paths { "compilerOptions": { "baseUrl": "src", "paths": { "@app/*": ["app/...
-
如何以Angular的姿势打开Font-Awesome详解
前言 本文主要给大家介绍了关于以Angular的姿势打开Font-Awesome的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 环境 Angular: v5.2.9 Font-Awesome: v...