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 相关文章推荐
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
Jun 26 Javascript
javascript 学习之旅 (2)
Feb 05 Javascript
Javascript跨域请求的4种解决方式
Mar 17 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
Nov 12 Javascript
js 走马灯简单实例
Nov 21 Javascript
jQuery中hasClass()方法用法实例
Jan 06 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
Jan 26 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
Jun 06 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
Jul 26 Javascript
JavaScript 类的封装操作示例详解
May 16 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
Jul 22 Javascript
jquery+ajax实现异步上传文件显示进度条
Aug 17 jQuery
整理关于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
thinkphp配置连接数据库技巧
2014/12/02 PHP
PHP7新增函数
2021/03/09 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
解析Python编程中的包结构
2015/10/25 Python
Flask框架的学习指南之用户登录管理
2016/11/20 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
Python selenium的基本使用方法分析
2019/12/21 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
深入分析python 排序
2020/08/24 Python
高级Java程序员面试题
2016/06/23 面试题
生日礼品店创业计划书范文
2014/03/21 职场文书
租赁协议书范本
2014/04/22 职场文书
班长演讲稿范文
2014/04/24 职场文书
节约用水的口号
2014/06/20 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL