1. 写在前面

之前基于Electron写过一个Markdown编辑器。就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成;但就代码而言,之前主要使用的是jQuery,由于本人非专业前段,代码写的自己都感觉是“一塌糊涂”,十分混乱。现在看到Angular2十分火爆,跑了跑它的The Tour of Heroes的例子,感觉非常不错,代码组织的井井有条,于是乎决定学习一下Angular2,然后用它将之前的NiceMark重写一下。

2. 整体感知

它组织代码的方式,引用其官方文档里的话就是:

You write Angular applications by composing HTML templates with Angularized markup, writing component classes to manage those templates, adding application logic in services, and boxing components and services in modules. ——GUIDE- 4. Architecture

大意就是说,你能这么去写一个Angular应用,用Angular扩展语法写HTML模板,写组件类去管理这些模板,用服务添加应用逻辑,用模块打包组件和服务。

用官方文档里的图说明就是:

简单解释一下该图:

  1. 图的中间部分,在component的上面画了MetadataTemplate,是说一个Component(组件)主要由元数据(Metadata)Template(模板)构成。Property Binding(属性绑定)箭头表示可以在component里定义property(属性),这些参数可以作为模板渲染的数据,而binding(绑定)的意思是说,一旦模板里的数据(比如一个输入框里数据)被修改了,它对应的property会自动地修改,或者反过来property被修改了,模板的相应内容也会跟着发生变化。Event Binding也类似,只不过针对的是Event(事件):你可以在模板中写代码去监听某一事件(当然Angular有自己的“监听语法”),并指定该事件被触发时调用component类中哪个方法(函数)。想象一下,我们可以在该方法中去修改某些property,根据前面Property Binding描述的,模板也会跟着发生变化。是的,在Angular中,你再也不用(也不要)直接的去修改DOM,而是修改property,它就是一个变量,修改起来多么的直观方便,你再也不必写像jQuery那样(比如,$xxx.text('姓名: '+ user.name +',年龄:'+ user.age))又臭又长的“恶心”代码了,尽管这可以用一些手段来优化,但总是不那么直观,简便。
  2. 图中两个虚线箭头是解释说明的意思,左边箭头解释的是,我们在编写一个component时,会依赖一些服务,而这些服务类不用自己去new,可以让Angular注入进来。比如我们要编写一个用来展示用户信息列表的组件,为此我们需要这些用户的信息,而这些用户信息需要通过发送HTTP请求去服务器中获取,这时我们可以写一个UserService类,写一个getUsers方法专门负责获取这些用户信息,component只需要调用UserServicegetUsers方法,便可以拿到这些信息,而获得UserService实例的方式最好不要自己去new,而是交给Angular去管理,让它帮我们注入进来。这点跟Spring依赖注入的意思是一样的。
  3. 右边的虚线箭头说的是,我们在编写模板时会用到一些Directive(指令),这些指令被用来指导Dom的渲染。
  4. 最后还剩下图的左上角部分,是一个一个的Module(模块)。它们像集装箱一样将ComponentService等较小的构成元素封装起来堆叠在一起,构成了一个完整的应用。

如果你还没有接触过Angular或者类似的框架,可能你还是不太明白Angular是怎么玩的 。不过没关系,以上内容只是让你对Angular有个大致的印象。实际上,它玩来玩去就是围绕以上提到的几个概念展开的,它们分别是:

  • module (模块)
  • component (组件)
  • template (模板)
  • metadata (元数据)
  • data binding (数据绑定)
  • directive (指令)
  • service (服务)
  • dependency injection (依赖注入)

只要明白了以上几个概念的意思,掌握了其用法,那就上道了。下文会结合几个小例子来解释这几个概念的含义的用法。

2. Hello World

老规矩,从Hello World开始。

有一点忘记说了,下面学习的是AngularTypeScript版本。TypeScript是JavaScript的超集,它在JavaScript的语法上做了扩展,如果你对TypeScript还不了解,建议先简单看看TypeScript的语法,中文站英文站都有。Angular的文档也是既有中文站,也有英文站,本文就是学习自Angular中文站,个人感觉翻译的非常好,并且点击每段文字都会出现英文原文,这点非常不错!

Angular2学习笔记(1)的更多相关文章

  1. angular2 学习笔记 ( rxjs 流 )

    RxJS 博大精深,看了好几篇文章都没有明白. 范围牵扯到了函数响应式开发去了... 我对函数式一知半解, 响应式更是第一次听到... 唉...不过日子还是得过...混着过先呗 我目前所理解的很浅,  ...

  2. angular2 学习笔记 ( ngModule 模块 )

    2016-08-25, 当前版本是 RC 5. 参考 : https://angular.cn/docs/ts/latest/guide/ngmodule.html 提醒 : 这系列笔记的 " ...

  3. Angular2学习笔记(1)——Hello World

    1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之前主要使用的是jQuery,由于 ...

  4. Angular2学习笔记——路由器模型(Router)

    Angular2以组件化的视角来看待web应用,使用Angular2开发的web应用,就是一棵组件树.组件大致分为两类:一类是如list.table这种通放之四海而皆准的通用组件,一类是专为业务开发的 ...

  5. Angular2学习笔记——Observable

    Reactive Extensions for Javascript 诞生于几年前,随着angular2正式版的发布,它将会被更多开发者所认知.RxJs提供的核心是Observable对象,它是一个使 ...

  6. Angular2学习笔记——在子组件中拿到路由参数

    工作中碰到的问题,特此记录一下. Angular2中允许我们以`path\:id\childPath`的形式来定义路由,比如: export const appRoutes: RouterConfig ...

  7. Angular2学习笔记——NgModule

    在Angular2中一个Module指的是使用@NgModule修饰的class.@NgModule利用一个元数据对象来告诉Angular如何去编译和运行代码.一个模块内部可以包含组件.指令.管道,并 ...

  8. angular2 学习笔记 ( Form 表单 )

    refer : https://angular.cn/docs/ts/latest/guide/forms.html https://angular.cn/docs/ts/latest/cookboo ...

  9. angular2 学习笔记 ( Http 请求)

    refer : https://angular.cn/docs/ts/latest/guide/server-communication.html https://xgrommx.github.io/ ...

随机推荐

  1. 【趣事】用 JavaScript 对抗 DDOS 攻击 (下)

    上一篇:http://www.cnblogs.com/index-html/p/js-network-firewall.html 对抗 v2 之前的那些奇技淫巧,纯属娱乐而已,并不能撑多久. 但简单. ...

  2. 使用AWS亚马逊云搭建Gmail转发服务(三)

    title: 使用AWS亚马逊云搭建Gmail转发服务(三) author:青南 date: 2015-01-02 15:42:22 categories: [Python] tags: [log,G ...

  3. 了不起的 nodejs-TwitterWeb 案例 bug 解决

    了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...

  4. kafka源码分析之一server启动分析

    0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...

  5. Spring Enable annotation – writing a custom Enable annotation

    原文地址:https://www.javacodegeeks.com/2015/04/spring-enable-annotation-writing-a-custom-enable-annotati ...

  6. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  7. 负载均衡——nginx理论

     nginx是什么? nginx是一个强大的web服务器软件,用于处理高并发的http请求和作为反向代理服务器做负载均衡.具有高性能.轻量级.内存消耗少,强大的负载均衡能力等优势.  nginx架构? ...

  8. Node.js Express连接mysql完整的登陆注册系统(windows)

    windows学习环境: node 版本: v0.10.35 express版本:4.10.0 mysql版本:5.6.21-log 第一部分:安装node .Express(win8系统 需要&qu ...

  9. Openfire集群源码分析

    如果用户量增加后为了解决吞吐量问题,需要引入集群,在openfire中提供了集群的支持,另外也实现了两个集群插件:hazelcast和clustering.为了了解情况集群的工作原理,我就沿着open ...

  10. 技术笔记:Indy控件发送邮件

    工作中有个需求需要发送邮件,因为使用的delphi6,所以自然就选择了indy组件,想想这事挺简单的.实现的过程倒是简单,看着Indy的demo很快就完了,毕竟也不是很复杂的功能. 功能要求: 1.压 ...