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 相关文章推荐
xml 封装与解析(javascript和C#中)
Jul 26 Javascript
学习JavaScript设计模式(多态)
Nov 25 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
Feb 17 Javascript
javascript之Array 数组对象详解
Jun 07 Javascript
微信小程序 教程之列表渲染
Oct 18 Javascript
Bootstrap Search Suggest使用例子
Dec 21 Javascript
jquery广告无缝轮播实例
Jan 05 Javascript
原生js实现旋转木马轮播图效果
Feb 27 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
Jul 11 Javascript
layui的table中显示图片方法
Aug 17 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
Dec 25 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
Oct 22 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发送邮件类代码附详细说明
2008/07/10 PHP
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
php计算一个文件大小的方法
2015/03/30 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
Javascript中的变量使用说明
2010/05/18 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
ptyhon实现sitemap生成示例
2014/03/30 Python
python实现图片变亮或者变暗的方法
2015/06/01 Python
Python3实现Web网页图片下载
2016/01/28 Python
Python中format()格式输出全解
2019/04/12 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
Python中Yield的基本用法
2020/10/18 Python
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
小学生勤俭节约演讲稿
2014/08/28 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers