当前位置:首页 > 日记 > 正文

Angular2开发——组件规划篇

Angular2开发——组件规划篇

本文集中讲讲笔者目前使用ng2来开发项目时对其组件的使用的个人的一些拙劣的经验。

先简单讲讲从ng1到ng2框架下组件的职责与地位:

ng1中的一大特色——指令,分为属性型、标签型、css类型和注释型。其中写在css类以及注释中的组件想必多数人都不会去使用,而属性型指令与标签型指令则是ng1火遍宇宙的功臣之一。在ng2中,标签型指令干脆被分离出来,追随vue等新兴势力的风格升级并称为组件,并用来处理所有与视图(DOM)打交道的事情,包括展示数据与动画。而属性型指令则用于完善组件的功能,比如接收用户输入、响应用户点击等事件。其实ng2中内嵌的许多功能都是属性型指令——ngFor、ngIf等等,而对于组件来说比较依赖具体的项目,所以跟适合基于项目来使用组件写出一个个用户看得见的界面来。同时组件还需要与路由打交道,前端路由可以看成是动态更改DOM,在ng2路由中制定好规则后,其实就是在动态渲染或销毁不同的组件,以此实现前端页面的切换。

然后讲讲笔者前面的项目时如何使用ng2组件搭起一个网站的:

1. 照着官方的做法,每个应用得有一个根组件。

2. 区分前端路由,每个路由条目指向一个组件,每个组件各自渲染一个页面。

3. 项目扩大,单模块不能满足业务分类,所以先由根路由引导懒加载各个子模块,然后由子模块的子路由各自指向具体的子组件,并渲染各自的页面。

4. 着眼单个子组件渲染的单个页面,其实可以将一些可重用的标签块封装到一个新的组件里(比如需要ngFor遍历的复杂数据项)。

5. 发现其实有一些组件(比如侧边按钮或消息模态框)其实整个项目都可能使用到,得把这些封装成全局共享的组件。

到现在自己都觉得有一点乱,究其原因,应该是组件这个名称的问题,因为在ng2框架下,大到路由页面小到数据条目全都用的组件,声明方式全都一个模样,难免会乱。

没办法只能自己来给组件继续细分类别了,笔者于是把ng2的组件分成了四类:

页面组件

  • 与路由打交道,只关心匹配路由规则渲染界面,此类组件在声明时不需要 selector 参数(只由路由定位不需要具体标签)
  • 接收路由参数或resolve数据,尽量不做其他业务交互的请求,且不设Input、Output变量

布局组件

  • 用于细分页面的模块若页面较简单可以省去直接使用单位组件,必须有具体的selector参数因为要在页面组件中使用
  • 不负责获取路由或resolve数据,且尽量不请求数据而通过Input传入数据或Output响应事件,所有业务交互请求尽量在布局组件中完成(不至于像放在页面组件中那么乱,且各布局组件可以做到互不影响)

单位组件

  • 必须有自己的selector,一般在自己模块中可重用,通过各种属性型指令修饰自身
  • 用于简化单位级别的重复标签,比如获取的列表数据中的每个数据项的界面展示就可以封装成一个单位组件
  • 只负责通过Input传入数据并显示,以及通过Output响应事件到外层的布局组件或页面组件中处理

共享组件

  • 必须有selector,整个项目都共享的组件,实现比较自由,重在减少整个项目的重复代码并方便维护
  • 比较合适的比如消息弹框,加载进度条等
  • 大部分的属性型指令,其实功能一般都比较通用,可以与共享组件等同对待,只不过共享组件拥有具体视图而共享指令只用于实现通用功能

如果纯文字不够形象,笔者再给出自己画的简易版ng2超级无敌前端架构图:

讲来讲去其实这里面完全没有技术难点,只是在暗示着一件事——项目目录安排很重要。

ng2可不认识笔者给它细分的这么多类型的组件,这些分类是给自己看的,具体的体现就是以这个分类体系得出的一个项目目录结构。

以笔者自己在写的一个项目为例:

笔者给文件夹命名前面有的加上了加号有的加上了减号,也算是自己的一种看似奇怪的目录结构安排了。

解释一下就是:最外层这个+term代表整个懒加载模块的目录,里面带加号的目录下的组件代表是页面组件,什么符号都没有的代表是布局组件,带减号的目录下的组件代表是单位组件,单位组件可能在整个懒加载模块中都使用到,所以直接在懒加载目录的最外层,而布局组件都在具体的页面组件同级目录下。

总结就是抛开ES6与TypeScript的外表后ng2组件的使用在技术上难点不算多,本文纯粹是一点拙劣的经验之谈,当然笔者目前的经验还远远不足,希望在日后的开发以致研究透彻ng2源码后能有更深的见解。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

相关文章

js和jquery中获取非行间样式

js和jquery中获取非行间样式

样式,电脑软件,js,jquery,样式又分为了行间样式和非行间样式。一般来说行间样式用的是比较少的,因为它能够作用的范围就只有一个元素,而非行间样式的作用范围可以是一类元素(即拥有相同德标签,或者说是有相同的类名,(当然id名不可能相同,唯一性)…

JS排序之快速排序详解

JS排序之快速排序详解

排序,快速排序,详解,电脑软件,JS,本文为大家分享了JS快速排序的具体代码,供大家参考,具体内容如下说明时间复杂度指的是一个算法执行所耗费的时间空间复杂度指运行完一个程序所需内存的大小稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面不稳…

jQuery源码分析之init的详细介绍

jQuery源码分析之init的详细介绍

源码分析,详细介绍,电脑软件,jQuery,init,init 构造器由于这个函数直接和 jQuery() 的参数有关,先来说下能接受什么样的参数。源码中接受 3 个参数:init: function (selector, context, root) { ...} jQuery() ,空参数,这个会直接返回一个空的…

JS字符串false转boolean的方法 |

JS字符串false转boolean的方法 |

方法,推荐,字符串,电脑软件,JS,大家都知道在JS的世界里, 0、-0、null、""、false、undefined 或 NaN,这些都可以自动转化为布尔的 false,那么字符串的"false"是不是false呢,答案是否定的,if("false") 来判断的话,是等于true的所以今天遇到…

怎么在excel中使用矩阵函数在excel

怎么在excel中使用矩阵函数在excel

函数,方法,教程,矩阵,电脑软件,  矩阵函数:定义域和值域都属于方阵的函数称为矩阵函数,它有多种定义方法。当用方阵幂级数的和函数来定义矩阵函数时,方阵函数f(a)=,其中自变量a和函数值f(a)都是n阶方阵,Ck是常系数。下面小编教你在excel中使用…

详谈Angular路由与Nodejs路由的区

详谈Angular路由与Nodejs路由的区

路由,区别,电脑软件,Angular,Nodejs,1、觉得angualr.js的路由是针对于单页面的路由,每次路由发生变化,只是页面的状态发生变化,页面本身没有发生跳转2、express的路由是针对多页面的,也就是说他做的页面,路由的切换是伴随着页面的切换3、所以建…

wps打开表格出错怎么处理

wps打开表格出错怎么处理

处理方法,方法,表格,怎么处理,电脑软件,  我们有时在打开wps表格的时候,会弹出打开错误的提示窗口,如果出现这样的问题,那么,我们应该如何解决呢?下面就让小编告诉你解决wps表格打开出错的方法,希望小编整理的学习资料对大家有用。解决wps表格…

powerpoint预设动画在哪个栏目

powerpoint预设动画在哪个栏目

方法,设置,动画,切换动画,栏目,  在制作幻灯片的时候,要怎么去设置页面切换动画呢?其实方法很简单,但是新手不会,怎么办?有简单易懂的方法吗?下面给大家分享ppt怎么设置页面切换动画的方法啦,希望小编整理的资料对大家有帮助。ppt设置页面切…

怎么用Word2017统计字数word2017怎

怎么用Word2017统计字数word2017怎

统计,步骤,字数,电脑软件,strong,  使用Word2017自己打了一篇文档以后,自己想要查看一下自己打了多少文字,怎么快速的查看文字个数呢,使用过Word低版本的朋友有些朋友知道怎么查看字数,但是版本升级以后,查看的方法有些区别,但是还是不影响到小…

如何设置word2013自动生成目录

如何设置word2013自动生成目录

自动生成,如何设置,目录,电脑软件,  word2013中的目录用起来比word2010的更顺手,也更舒服。word2013插入目录用起来也不难,却能让整个文档阅读起来更方便,那么下面就由小编给大家分享下让word2013自动生成目录的技巧,希望能帮助到您。自动生…

JavaScript原生节点操作小结

JavaScript原生节点操作小结

节点操作,原生,电脑软件,JavaScript,前言:原生是Javascript的基础,还是需要多多重视,时间长都忘记了,现在整理一下。获取子节点children 不是标准的dom属性,但是几乎被所有浏览器支持。不包含文本节点.注意:在IE中,children包含注释节点。childNod…

excel表格间隔求和的方法excel表格

excel表格间隔求和的方法excel表格

方法,间隔,表格,电脑软件,excel,  Excel中的表格具体该如何间隔求和呢?下面是由小编分享的excel表格间隔求和的方法,以供大家阅读和学习。excel表格间隔求和的方法表格间隔求和步骤1:我们看到图中的颜色标记,我们是隔行求和,每隔一行求和一次…