2024年Web前端最全Angular 组件升级实战:将项目中的ng2-tree组件替换成ngx-tree,阿里P7Web前端社招面试的经历

HTTP

  • HTTP 报文结构是怎样的?

  • HTTP有哪些请求方法?

  • GET 和 POST 有什么区别?

  • 如何理解 URI?

  • 如何理解 HTTP 状态码?

  • 简要概括一下 HTTP 的特点?HTTP 有哪些缺点?

  • 对 Accept 系列字段了解多少?

  • 对于定长和不定长的数据,HTTP 是怎么传输的?

  • HTTP 如何处理大文件的传输?

  • HTTP 中如何处理表单数据的提交?

  • HTTP1.1 如何解决 HTTP 的队头阻塞问题?

  • 对 Cookie 了解多少?

  • 如何理解 HTTP 代理?

  • 如何理解 HTTP 缓存及缓存代理?

  • 为什么产生代理缓存?

  • 源服务器的缓存控制

  • 客户端的缓存控制

  • 什么是跨域?浏览器如何拦截响应?如何解决?

    开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

public tree: TreeModel = {

value: ‘Programming languages by programming paradigm’,

id: 1,

children: [

{

value: ‘Object-oriented programming’,

id: 2,

children: [

{value: ‘Java’, id: 3},

{value: ‘C++’, id: 4},

{value: ‘C#’, id 5},

]

},

{

value: ‘Prototype-based programming’,

id: 6,

children: [

{value: ‘JavaScript’, id: 7},

{value: ‘CoffeeScript’, id: 8},

{value: ‘Lua’, id: 9},

]

}

]

};

在我所做的那一Part里面,ng2-tree树结构节点的主要三个属性是

  • value

  • id

  • children

使用ng2-tree:

<tree

[tree]=“tree”

[settings]=“settings”

(nodeRemoved)=“handleRemoved($event)”

(nodeRenamed)=“handleRenamed($event)”

(nodeSelected)=“handleSelected($event)”

(nodeMoved)=“handleMoved($event)”

(nodeCreated)=“handleCreated($event)”

(nodeExpanded)=“handleExpanded($event)”

(nodeCollapsed)=“handleCollapsed($event)”

(loadNextLevel)=“handleNextLevel($event)”>

tree,settings,nodeSelected和nodeExpanded等这些,就是可以在ng2-tree的template模板里面使用的一些API吧。

demo实例:

<tree [tree]=“treeNodes” [settings]=“treeSettings” (nodeSelected)=“showNgTwoTree( e v e n t ) " ( n o d e E x p a n d e d ) = " o n N o d e E x p a n d e d ( event)" (nodeExpanded)="onNodeExpanded( event)"(nodeExpanded)="onNodeExpanded(event)” (nodeCollapsed)=“onNodeCollapsed($event)”>

nodeSelected等这些的使用,具体看项目的功能需求。

初识ngx-treeview

=============================================================================

其实ngx-treeview也和ng2-tree差不多,换汤不换药。使用上仅是在一些特性,功能,属性这些作了一些文章。

详细的介绍都可以去其npm上查看浏览。

先看看ngx-treeview的结构是怎么样:

const category = new TreeviewItem({

text: “IT”,

value: 9,

children: [

{

text: “Programming”,

value: 91,

children: [

{

text: “Frontend”,

value: 911,

children: [

{ text: “Angular 1”, value: 9111 },

{ text: “Angular 2”, value: 9112 },

{ text: “ReactJS”, value: 9113 },

],

},

{

text: “Backend”,

value: 912,

children: [

{ text: “C#”, value: 9121 },

{ text: “Java”, value: 9122 },

{ text: “Python”, value: 9123, checked: false },

],

},

],

},

{

text: “Networking”,

value: 92,

children: [

{ text: “Internet”, value: 921 },

{ text: “Security”, value: 922 },

],

},

],

});

每个node主要有三个属性

  • text

  • value

  • children

具体是什么就不多说了~

也可以单独创建一个节点,再把这个节点添加到某一节点的children数组里面:

const vegetableCategory = new TreeviewItem({

text: “Vegetable”,

value: 2,

children: [

{ text: “Salad”, value: 21 },

{ text: “Potato”, value: 22 },

],

});

vegetableCategory.children.push(

new TreeviewItem({ text: “Mushroom”, value: 23, checked: false })

);

再看看treeviewItem都有些什么东西可以用:

在这里插入图片描述

demo示例:

config = TreeviewConfig.create({

hasAllCheckBox:true,

hasFilter:true,

hasCollapseExpand:true,

maxHeight:400;

})

<ngx-treeview class=“ngx-tree” [items]=‘items’ [config]=“config” (selectedChange)=“onSelectedChange( e v e n t ) " ( f i l t e r C h a n g e ) = " o n F i l t e r C h a n g e ( event)" (filterChange)="onFilterChange( event)"(filterChange)="onFilterChange(event)”>

简单的使用就是这样子:

  • 数据放到items里;config是ngx-treeview的配置,可以自行配置其是否有checkbox,是否有过滤查找,最大高度是多少等等

  • 主要使用的属性,text,value,children,checked,collapsed和disabled。分别对应文本,值,子节点,是否被点击,是否展开,是否禁用。

改造之路 ①(坑)

========================================================================

如果要改造的话,就面临几个需要解决的问题:

  • 要把ngx-treeview的原生样式改得与原本的样式一样,需要统一。

  • ngx-treeview本质是个复选框checkbox。然而使用树形菜单,当然是要单选框radio。总不可能:点击nodeOne,响应nodeOne的内容;再点击nodeTwo,响应nodeOne和nodeTwo的内容吧!所以问题是怎么把checkbox改成radio.

  • ngx-treeview一开始Show出来后,每个node都是被选中的(总不能刚显示出菜单,就响应所有的内容吧!我压根都没有选过哪个菜单!)。所以要限制其一开始都是不选中的状态

修改样式


针对样式,我们可以通过F12,去看其已有样式是怎么样。再用 ::ng-deep 这些方法去做调整。

最终也是能把字体、颜色、间距padding和margin、以及小箭头这些的样式都改得一模一样。

所以这不是一个太大的问题。

限制一开始都是不选中


看treeviewItem的属性,可以看到,它有checked的访问器属性

在这里插入图片描述

原本checked都是true,我只要人为设置为false就好,这样就不会一开局就都选中了。

let node = new TreeviewItem({

text:tress.value,value:trees.event,collapsed:true

});

node.checked = false;

最后

推荐一些系统学习的途径和方法。

路线图

每个Web开发人员必备,很权威很齐全的Web开发文档。作为学习辞典使用,可以查询到每个概念、方法、属性的详细解释,注意使用英文关键字搜索。里面的一些 HTML,CSS,HTTP 技术教程也相当不错。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

HTML 和 CSS:

html5知识

css基础知识

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值