使用 css 创建具有水平和垂直线的树视图,显示连接性

2024-03-01

我有一个要求,我们需要显示嵌套元素以具有文件夹和子文件夹的水平线和垂直线。我搜索过但找不到任何相关内容。 请参阅下图以供参考。

示例图片 https://i.stack.imgur.com/IZCiG.png

有人可以帮助我解决这个问题吗?


首先,它知道如何使用 .css 来制作它。我发现这种美纯 CSS 中的极简树视图 https://www.cssscript.com/minimalist-tree-view-pure-css/

好了,有了这个想法我们就可以使用 Angular 来生成一个“递归组件”了。但首先我们必须考虑到我们需要使用“属性选择器”来不生成组件的标签。别担心,它只是用作选择器

selector: '[recursive]'

所以,不要写一些像

<recursive></recursive>

我们可以使用一些像

<ul recursive></ul>

嗯,这个组件就像

<li *ngFor="let item of children">
    {{item.label}}
    <ul recursive *ngIf="item.children" 
        [children]="item.children" 
        [parent]="self" 
        [level]="level!=undefined?level+1:0">
    </ul>
</li>

@Component({
  selector: '[recursive]', //<--the the "selector"
  templateUrl:'./hello.component.html'
})    
export class HelloComponent  {
  @Input() level: number;
  @Input() label: string;
  @Input() children: any;
  @Input() parent: any;

  self=this;

}

好吧,我添加了属性“level”和“parent”,我在代码中没有使用它们,但如果我们的组件制作“更多”来显示树,那么它们可能会很有趣。

我们的 app.component.html 有点像

<ul class="tree" recursive [children]="data"></ul>

当心。我需要在 app.component 中使用 ViewEncapsulation.None 来传输 .css

确保我们给[孩子]自己的数据

哪里,例如

data = [{label: "Parent1", children: [
      { label: "Parent 1's only child"  }
  ]},
    {label:"Parent2"},
    {label:"Parent3", children: [
      { label: "1st Child of 3" ,children:[
         {label:"1st grandchild"},
         {label:"2nd grandchild"}
      ]},
      { label: "2nd Child of 3" },
      { label: "3rd Child of 3" }
      ]
   },
   {
    label: "Parent 4", children: [
      { label: "Parent 4's only child"  }
  ]}]

你可以看到在这次堆栈闪电战 https://stackblitz.com/edit/angular-a8psdg?file=src%2Fapp%2Fapp.component.ts

Updated如果我们想要添加打开/关闭功能,很容易添加一个跨度并使用 [ngClass] 来处理三种情况:doc、打开和关闭,因此我们的 recursive.html 变为

<li *ngFor="let item of children">
    <span [ngClass]="!item.children?
         'doc':item.isOpen?'open':'close'" 
         (click)="item.isOpen=!item.isOpen"></span>
    {{item.label}}
    <ul recursive *ngIf="item.children && item.isOpen" 
        [children]="item.children" 
        [parent]="self" 
        [level]="level!=undefined?level+1:0">
    </ul>
</li>

我使用了 .css 像

.doc,.open,.close
{
  display:inline-block;
  width:1rem;
  height:1rem;
  background-size: 1rem 1rem;
}
.doc
{
  background-image:url('...');
}
.open
{
  background-image:url('...');
}
.close
{
  background-image:url('...');
}

The 更新了堆栈闪电战 https://stackblitz.com/edit/angular-eeqbls?file=src%2Fapp%2Ftree-view.component.html

更新2我不喜欢太多使用 ViewEncapsulation.None,所以我们可以做一个解决方法,我们的递归组件变得像

<ul class="tree" *ngIf="level==undefined">
  <ng-container *ngTemplateOutlet="tree;context:{children:children}">
  </ng-container>
</ul>
<ng-container *ngIf="level!=undefined">
  <ng-container *ngTemplateOutlet="tree;context:{children:children}">
  </ng-container>
</ng-container>

<ng-template #tree let-children="children">
<li *ngFor="let item of children">
    <span [ngClass]="!item.children?'doc':item.isOpen?'open':'close'" (click)="item.isOpen=!item.isOpen"></span>{{item.label}}
    <ul recursive *ngIf="item.children && item.isOpen" 
        [children]="item.children" 
        [parent]="self" 
        [level]="level!=undefined?level+1:0">
            </ul>
</li>
</ng-template>

那是。第一个使用<ul class="tree">...</ul>,其他的不加<ul>

再次,最后的堆栈闪电战 https://stackblitz.com/edit/angular-476x7s?file=src%2Fapp%2Ftree-view.component.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 css 创建具有水平和垂直线的树视图,显示连接性 的相关文章

  • Safari 6 (iOS 6) 弹性布局不会换行元素

    我需要将两个框放在列中 这在我测试过的其他浏览器中有效 但在 iOS 6 上的 Safari 6 中无效 例子 http jsfiddle net 5FESj 1 http jsfiddle net 5FESj 1 display webk
  • Angular - 使用 routerlink 将对象传递给 @Input 参数

    我有一个带有 Input 参数的角度分量 如下所示 Component selector app transmission history export class TransmissionHistoryComponent implemen
  • 使用 HttpClient 而不是 Http,类型“Subscription”不可分配给类型“Observable”Angular 5

    我正在尝试使用新的 HttpClient 类而不是旧的 Http 我想映射从订阅方法获得的数据 但出现以下错误 关于为什么我得到这个有什么建议吗 Code export class YoutubeSearchService construc
  • 具有动态名称的 Angular Material 2 日期选择器

    我正在尝试实现具有动态名称的日期选择器组件 我正在使用 Angular 4 开发基于 Angular Material 2 的项目 这是我的实现
  • 将字符串编码为 HTML 字符串 Swift 3

    如何快速编码字符串以删除所有特殊字符并将其替换为其匹配的 html 编号 假设我有以下字符串 var mystring This is my String That s it 然后用它的html编号替换特殊字符 38 39 gt 62 但我
  • Mat-table 多行内的多行

    我想要的内容如下图所示 我使用 Angular Material 7 x 并使用 Mat Table 实现 如下所述 https material angular io components table overview https mat
  • Angular Firebase 电子邮件验证验证后错误

    我正在使用电子邮件和密码设置授权功能 一切正常 但当我创建新用户时 应用程序会发送一封带有验证链接的电子邮件 验证电子邮件地址后 我想登录 以便返回登录表单 emial verified 保持在 假 状态 在我硬重新加载页面后 这是 真 但
  • 调整 Twitter-Bootstrap 中按钮的大小

    我正在开发一个适合移动设备的网络应用程序 我希望它有一个非常简单的用户界面 包括大到连巨人安德烈都可以轻松点击的按钮 问题是 我没有看到通过将引导按钮的宽度或高度设置为百分比 像素数或简单地让它们填充其容器来显式调整引导按钮大小的简单方法
  • 在 Bootstrap 3 中将容器类嵌套在容器流体类中?

    除了填充问题之外 为什么不建议将 container 嵌套在 container fluid 中 如果将子容器填充归零 如下面我的代码所示 则效果与拥有一个容器相同 此外 如今 不同的全宽和固定宽度布局似乎很常见 我知道文档说了什么 LIN
  • Angular 7 Guard 重定向仅适用于双击

    问题是我已经实现了一个 Guard 旨在处理特定的目录 如果当前用户名的角色等于 2 它应该返回 true 如果没有 那么它不应该重定向 这是我的 app routing module ts 文件 问题出在 userlist 路径中 我们是
  • 如何从 Firefox 中的选择元素中删除箭头

    我正在尝试设计一个select使用 CSS3 的元素 我在 WebKit Chrome Safari 中得到了我想要的结果 但 Firefox 的表现不佳 我什至不关心 IE 我正在使用 CSS3appearance属性 但由于某种原因我无
  • React.js this.props.data.map() 不是一个函数

    我正在搞乱反应并尝试解析和渲染 json 对象 现在 我只是使用硬编码对象设置它以进行测试 而不是从 ajax 调用中获取它
  • CSS“概述”Webkit 和 Gecko 上不同的行为行为

    我正在做一个实验 我发现 轮廓 CSS2 属性在 Webkit 和 Gecko 上的实现方式不同 在下面的脚本中 我有一个绝对位置 div 在另一个 div 内 但浮动在其外部 Webkit 上的轮廓概述了实际的父 div 而在 Gecko
  • 通过电子邮件发送在 HTML5 画布上创建的图像

    我有一个画布 用户可以通过交互来更改设计 现在 用户完成更改后 可以提交他的设计及其电子邮件 ID 但为了提交设计 我使用以下方法将画布转换为图像http www nihilogic dk labs canvas2image http ww
  • 使图像宽度为父 div 的 100%,但不大于其自身宽度

    我试图让图像 动态放置 对尺寸没有限制 与其父 div 一样宽 但前提是该宽度不比 100 时其自身宽度宽 我已经尝试过这个 但没有成功 img width 100 height auto max width 100 其中许多图像比它们的父
  • 在 HTML5 画布上创建颜色选择器

    如何在 HTML5 画布上绘制颜色选择器 一个基本的例子是使用getImageData http jsfiddle net eGjak 60 http jsfiddle net eGjak 60 var ctx cv get 0 getCo
  • JQuery Mobile - 内联显示 HTML 表单

    Goal 在 Jquery Mobile 中的同一行显示文本框和提交按钮 Problem 它们不会显示在同一行 我曾多次尝试在同一行显示文本框和提交按钮 但它从未起作用 这是我的代码和我使用的组合
  • jQuery 显示/隐藏兄弟姐妹

    我有这段代码 旨在首先隐藏除第一个元素之外的所有相关元素 这个 做的不错啊接下来 它应该根据选择的项目显示 隐藏这些元素 但这部分不起作用 想法 jQuery accordion dl not first child hide hide a
  • ☺ 不在移动版本中呈现

    我如何获得特殊角色 笑脸在移动浏览器中正确呈现 li a href http goo gl GjxlI title target blank span style font size 20px span a li 它在大多数浏览器上显示为
  • 网页执行回发时如何停止在注册表单上?

    我正在做我的最后一年的项目 其中 我在一页上有登录和注册表单 WebForm 当用户点击锚点时Sign Up下拉菜单ddlType 隐藏 和文本框 txtCustName txtEmail and txtConfirmPassword 显示

随机推荐

  • 如何使用 Google Calendar API v3/Google API 客户端库显示*所有*可用日历的列表?

    我一直在尝试使用 PHP 访问 Google Calendar API v3 最初 我想简单地列出我可以通过 API 调用访问的用户日历 为此 我下载了 Google API PHP 客户端库 并尝试使用以下代码 经过我的改编 来自http
  • IIS 7.5 上的 MVC5 路由错误 (404.0) 错误

    一个古老的故事是 在开发机器上一切正常 但在主机服务器上却不行 HTTP 错误 404 0 未找到 模块IIS 网络核心 通知地图请求处理器 处理程序静态文件 错误代码0x80070002 尝试通过添加在开发机器上产生相同的错误
  • 使用参数时“Between”运算符生成错误的查询计划

    我有一个简单的日期表 Date DateID 其中包含 1900 年 1 月 1 日到 2100 年 12 月 31 日之间的日期列表 当使用从表中选择时between运算符和硬编码参数值 我得到了一个正确的查询计划 其中有 3 个估计行与
  • 使用多个参数注册 DbContext

    我正在尝试将 TenantProvider 注入 DbContext public class AppDbContext IdentityDbContext
  • Django 装置使用默认值保存

    我正在使用 Django 1 7 但我的装置有问题 我希望 Django 使用默认值或使用save 方法来创建未指定的值 这是我当前的对象 File uuidable py import uuid from django db import
  • Java中共享内存的任何概念

    AFAIK Java中的内存是基于堆的 内存是动态分配给对象的 并且没有共享内存的概念 如果没有共享内存的概念 那么Java程序之间的通信应该是很耗时的 在 C 中 与其他通信模式相比 通过共享内存进行进程间通信更快 如我错了请纠正我 另外
  • 访问“仅差异”ZFS 快照

    有没有办法挂载仅包含特定于快照的文件的虚拟分区 我知道隐藏的 zfs 目录 但它包含快照时的所有文件 我的目标是使差异备份更快 提前致谢 greg 尽管安德鲁的建议zfs send如果您只是想 这是使用差异快照的正确方法see差异并在您自己
  • 无法将 python 配置为代理

    与我的问题相关的早期帖子都无法为我提供解决方案 所以我在一个新线程中发帖 我通过大学中经过身份验证的代理连接到互联网 所以在浏览器中 我输入我的用户名密码 但是我无法在 python 中下载数据 我在 python 2 7 中输入以下 4
  • 有没有办法将 Google colab 环境保存到某个地方并重新使用它?

    我尝试过 virtualenv 和 conda 它已成功安装 但我无法激活虚拟环境 然后我考虑将 Colab 环境 我的意思是已安装的库 保存到某个地方 也许是 Google Drive 然后我可以重用它 是否可以 对于提问者以及因同一问题
  • 您更喜欢哪种方法来改进 Maven 项目的增量构建?

    我将优化构建项目的时间 最耗时的事情之一是项目的编译 由于这里特别提到的 Maven 的已知问题 Maven增量构建 https stackoverflow com questions 6281699 maven incremental b
  • 与alignas语法作斗争

    我正在尝试使用alignas对于属于类成员的指针 坦率地说 我不确定应该把它放在哪里 例如 class A private int n alignas 64 double ptr public A const int num n num p
  • 使用 mat-paginator 和 mat-table 使用可观察数组作为数据源

    我使用可观察数组作为数据源 这工作正常 只是我现在无法弄清楚如何使用分页器 下面是html和ts html table class mat elevation z8 table
  • Rails 使用哈希数组查找记录

    使用字段选择 按字段对查询 in clause 我有一个哈希数组 如下所示 product id 7629 group id 4 product id 8202 group id 3 我想返回的是所有的记录Items与数组中的字段对匹配的表
  • Android AutoCompleteTextView 在横向模式下显示对象信息而不是文本

    我正在使用带有 AutoCompleteTextView 的自定义适配器 它在模拟器和我的平板电脑上运行良好 但是 我的手机在横向模式下出现问题 在此模式下显示的自动完成提示是对象信息而不是文本 但是 当我选择任何项目时 字段会正确填充相应
  • Python 服务发现:在本地网络上公布服务

    我有一个 服务器 python 脚本在其中一台本地网络计算机上运行 它等待客户端连接 并传递给它们一些要做的工作 服务器和客户端代码都已编写 并且正在按预期工作 问题是 该服务器可能从本地网络中的任何机器上运行 因此我无法在脚本中对地址进行
  • 如何在网页中显示本地图片?

    我需要在网页上显示图片而不上传它 就像是 img src 怎么做 您可以使用轻松做到这一点FileReader readAsDataURL 用户选择一张图片 您无需上传即可显示它 欲了解更多信息 请参阅https developer moz
  • 为什么可以将 int[] 转换为 Object,但不能转换为 Object[]?

    所以这有效 int i Object a Object i int t Object b Object t String s Object t Object s 但这并不 int t Object z Object t 总而言之 我得到了第
  • gen:Racket 类的自定义编写

    我正在寻找规范的方法来指定自定义方法来输出 Racket 对象的字段 换句话说 我正在寻找与 Java 相当的 RackettoString方法 如果存在 我知道对于结构可以使用gen custom write指定write proc功能
  • 部署 nginx 入口控制器时创建资源“configmaps”时出错

    我完全按照这个教程 https akomljen com kubernetes nginx ingress controller 部署 nginx 入口控制器 用于部署入口控制器和描述输出的 yaml 文件被复制到repo https gi
  • 使用 css 创建具有水平和垂直线的树视图,显示连接性

    我有一个要求 我们需要显示嵌套元素以具有文件夹和子文件夹的水平线和垂直线 我搜索过但找不到任何相关内容 请参阅下图以供参考 示例图片 https i stack imgur com IZCiG png 有人可以帮助我解决这个问题吗 首先 它