Angular2入门--架构总览


Posted in Javascript onMarch 29, 2017

大致介绍

在3月23日,Angular4正式发布(没有3)。似乎现在学Angular2又晚了,又晚一步-_-||。Angular2在Angular1的基础上有了较大的改变。之前向一个同学(之前学过Angular1)问一个Angular2的问题,他反问到这是Angular代码? 可见Angular1->Angular2的变化有多大。先来看看Angular2的架构

核心模块

一个完整的Angular应用主要由六个重要部分组成:组件、模板、指令、服务、依赖注入和路由

他们之间的关系:

Angular2入门--架构总览

从图中可以看出:

1、与用户交互的是模板视图,模板和组件类共同组成组件

2、路由是控制组件的创建和销毁,从而驱使界面切换

3、指令和模板相关联,扩展了模板的语法

4、服务是封装若干个功能逻辑的单元,通过依赖注入引入组件内部

组件

Angular框架是基于组件设计,组件负责控制屏幕上的一小块区域,例如网页的导航栏就是一个组件

一个组件的代码:

import { Component, Input } from '@angular/core';
import { Hero } from './hero';
@Component({
 selector: 'my-hero-detail',
 template: `
 <div *ngIf="hero">
  <h2>{{hero.name}} details!</h2>
  <div><label>id: </label>{{hero.id}}</div>
  <div>
  <label>name: </label>
  <input [(ngModel)]="hero.name" placeholder="name"/>
  </div>
 </div>
})
export class HeroDetailComponent {
 @Input()
 hero: Hero;
}

模板

我们通过组件的自带的模板来定义组件视图。模板以 HTML 形式存在,告诉 Angular 如何渲染组件。

例如上面组件中的@Component中就是模板

@Component({
 selector: 'my-hero-detail',
 template: `
 <div *ngIf="hero">
  <h2>{{hero.name}} details!</h2>
  <div><label>id: </label>{{hero.id}}</div>
  <div>
  <label>name: </label>
  <input [(ngModel)]="hero.name" placeholder="name"/>
  </div>
 </div>
})

指令

指令和模板的关系密切,指令可以与DOM进行灵活交互,可以改变样式也可以修改DOM。一般的指令都作用在已有的DOM元素上

1、修改DOM

<button *ngIf="canEdit">编辑</button>

当canEdit为true时,button会显示,否则,button隐藏

2、改变元素样式

<button [ngStyle]="setStyles()">编辑</button>

setStyles()是一个函数,可以通过这个函数修改元素的样式

服务

服务是封装单一功能的单元,常被引用于组件内部,作为组件的功能扩展。它可以是一个简单的字符串或是JSON数据,也可以是一个函数甚至是一个类

组件本身不从服务器获得数据、不进行验证输入,也不直接往控制台写日志。 它们把这些任务委托给服务。

一个简单的服务(包含一个类):

export class Hero {
 id: number;
 name: string;
}

依赖注入

通过依赖注入机制,服务等模块可以被引入到任何一个组件中,而开发者无需关心这些模块是如何被初始化的。因为Angular已经帮你处理好了,包括本模块本身依赖的其他模块也会被初始化

路由

路由它把浏览器中的URL看做一个操作指南, 据此导航到一个由客户端生成的视图,并可以把参数传给支撑视图的相应组件,帮它决定具体该展现哪些内容。 我们可以为页面中的链接绑定一个路由,这样,当用户点击链接时,就会导航到应用中相应的视图。 当用户点击按钮、从下拉框中选取,或响应来自任何地方的事件时,我们也可以在代码控制下进行导航。 路由器还在浏览器的历史日志中记录下这些活动,这样浏览器的前进和后退按钮也能照常工作。

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

Javascript 相关文章推荐
制作特殊字的脚本
Jun 26 Javascript
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
Apr 15 Javascript
基于jquery封装的一个js分页
Nov 15 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
Nov 24 Javascript
JS实现回到页面顶部动画效果的简单实例
May 24 Javascript
jQuery实现区域打印功能代码详解
Jun 17 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
Aug 15 Javascript
JavaScript日期对象(Date)基本用法示例
Jan 18 Javascript
Vue props 单向数据流的实现
Nov 06 Javascript
JS学习笔记之原型链和利用原型实现继承详解
May 29 Javascript
解决vue项目 build之后资源文件找不到的问题
Sep 12 Javascript
Ant-design-vue Table组件customRow属性的使用说明
Oct 28 Javascript
整理关于Bootstrap表单的慕课笔记
Mar 29 #Javascript
AngularJS中$http的交互问题
Mar 29 #Javascript
Angular2开发——组件规划篇
Mar 28 #Javascript
jquery实现静态搜索功能(可输入搜索文字)
Mar 28 #jQuery
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
Mar 28 #jQuery
关于Node.js中Buffer的一些你可能不知道的用法
Mar 28 #Javascript
使用JavaScriptCore实现OC和JS交互详解
Mar 28 #Javascript
You might like
两个php日期控制类实例
2014/12/09 PHP
前端必学之PHP语法基础
2016/01/01 PHP
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
简单的分页代码js实现
2016/05/17 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
python enumerate函数的使用方法总结
2017/11/15 Python
深入浅析python with语句简介
2018/04/11 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
python实现ip地址的包含关系判断
2020/02/07 Python
python实现简单的tcp 文件下载
2020/09/16 Python
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
学校安全责任书
2014/04/14 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技