angular2综述
Published by Shangyu Liu,
最好的教程是官方文档:https://angular.cn/guide/architecture
angular2可以通过两种方式来开发,第一种是传统的方法,引入相关的js文件(很难搞清楚依赖关系,先后顺序,在模块的bundle文件夹中)。第二种方法是采用typescript来开发,然后打包成js代码。
从官方的文档来看,从根本原理上angular2与angular1的使用没有什么本质区别,毕竟还是js代码,仍然ng为全局变量,使用起来一如既往。无论是使用typescript,es7还是es6还是es5,终究是要翻译成浏览器认识的版本,以typescript为例,使用@注解,由于angular相关node模块的引入,最终在弄的环境下翻译过来这个被export的class被缀到了全局变量(比如叫app)之上,成为一个属性而已,而这段代码可能被包裹在IIFE中不会暴露这个变量(typscript中的class)。翻译出来的结果肯定是晦涩难懂的(比如将普通的js用webpack打包后就很难读懂了),但原理如此。
我对angular的理解,angular提供了很多好的特性,从页面入手,将dom的一个个元素加工成一个个组件。这些组件能够维持自己内部的数据模型,通过双向数据绑定+脏值检测,使得程序员从繁杂的数据监听中解放出来。同时模块之间能够通信,进一步解放程序员,使得代码模块清晰,自动化程度高。另外如指令等都带来了很大的优势(坑待填)。
angular工作流程与代码结构:
我们只讨论打包完毕之后的运行流程(也就是用es5直接来写的angular代码是怎样工作的)。angular在启动之后,会首先扫描整个html页面,遇到了代码中定义的标签,就会处理这些标签(内部流程具体事怎样的慢慢再搞清楚)。
首先,如何启动angular程序呢(Tip:bootstrap这个词是引导程序的意思),
模块:模块是一个class,也是需要初始化的,有些工作是我们写在ngOnInit中的,另外如通过装饰器的注入也将在初始化时完成,可调试验证。
angular的模块与js(node)的模块是完全不同的,但是构建一个angular都是需要的,比如angular自己的原生模块就是发部到了npm中,在ts开头import是对于js模块而言的,而在angular的module中importshi