Angular2 初学小记
1.与Angular1的异同
几乎完全不同(什么鬼~
1)保留一些特性 表达式仍旧用{{}}。
2)属性指令变为驼峰式 ng-if ---> ngIf
3)ng-repeat被ngFor代替
4)ng-model ------> [(ngModule)] 注意符号
5)Angular2中,自带原始指令要加哈希前缀 #
6)Angular2新增了对移动端的设计
7)Angular2摒弃了1中的核心:$scope
8)Angular2使用zone.js来检测变化。
9)新增组件类component
可以说是取代了1中的controller: template&directive+controller = component。
承担视图部分的工作,这一点类似于react中,组件可以相互嵌套,父子组件之间的通信的主要途径即组件的属性(react中组件间通信依靠props,也是组件的属性),但是component好像要与模板(module)配合插入视图,比较麻烦,隐约是个坑
10)数据绑定stronger,绑定的机制也完全不同,新增属性的双向、单项绑定以及函数绑定等
11)主要性能优化改进(有待深究),使用了分层依赖注入系统;基于单向树的变化检测;体积小;在移动端应用中,流量方面占优势;支持影子DOM
2. typeScript
TypeScript是微软开发的自由和开源的编程语言,它是js的超集,扩展了js语法。typeScript文件后缀.ts。ts支持es6标准。
推荐使用typeScript编写angular2代码。
1)类型批注(目的?):给参数、函数等增加静态类型声明,eg:
function Area(width:number, right:number) : number {....}
常用的批注类型:number,bool,string,没有类型被推断出时即默认为动态的any类型
2)接口
interface Shape{
name:string; //这里都是类型批注
width:number;
height:number;
}
//将接口作为参数传入,接口本身也可以作为类型批注。shape的类型批注是shape
Function Area(shape : shape){.....}
console.log(area({ width:30, height:15}));
3)箭头函数 ()=>
详情见es6小记
4)接口
class Shape{
area:number;
color:string;
//构造器 参数声明为public,以便在外部访问类中的成员 否则会报错~
constructor( public name:string, width: number, height:number){
this.area = width*eight;
};
functionName(){...}
}
//在外部调用该类
import {user} from 'url'
var square = new Shape('square' , 30, 30)
类成员有public和private修饰符,类似于Java中,public成员可以在任何地方访问,private成员只允许在类中访问。
5)继承
类似于Java,类可以被继承并创建一个派生类,关键字extend,派生类继承基类的属性可以用super方法调用基类的构造函数与方法,也可以重写基类的方法
class Shape3D extends Shape{
volume:number;
constructor:(public name:string,width:number,height:number){
super(name,width,height);//调用基类的构造函数
this.volume = length*this.area;
};
shoutout(){...}//重写基类的shoutout函数
superShout(){
return super.shoutout(); //调用基类的构造函数
}
}
3.ngModules模块
Angular用ngModule来创建不同的功能相关的代码块(angular模块),在需要的时候只导入需要的angular模块
每个angular应用至少需要一个root module
import {NgModule} from '2angular/core';
@NgModule({
imports:[ ], //需要载入的其他模块
providers: [ ], //服务的创建者
declarationa:[ ], //视图类属于这个模块
export:[ ], //到处可在外部使用该模块
bootstrap: [ ] //应用的主视图,所有视图的宿主,只在根模块中声明
})
4.component组件
每个angular应用至少需要一个root component,在angular中,组件本质上是带有模板的一种指令
import { component } from '@angualr/core';
@Component({
selector: 'my-app', //CSS选择器,可以以<mg-app>标签的形式将组件引入父模板
template: '<h1>hello angular<h1>' //这里也可以填模板的URL
directives:[ ] //数组,包含此模板需要依赖的组件或指令
provider:[ ] //数组,包含组件所依赖的服务的提供者
})
//组件可以在文件外被使用 : import {Appcomponent} from 'url'
export class AppComponent{
相关逻辑处理,这里相当于component的控制器
}
@component是angular的装饰器,它会把一份元数据(即组建的配置项)关联到AppComponent上
5.数据绑定
1)插值:表达式仍旧是双括号的形式{{ }},可以用getValue( )获取表达式的值 {{ 1+1+getValue() }}
表达式语法类似js,但不是全部,有的表达式是禁止的:赋值表达式(=,+=),new ,++,--, 位运算符( | &)
2)属性双向绑定:把元素的属性设置为组件中属性的值 形式: [ ]
<img [src]='image'> //这里img的src属性会被绑定到组件的属性imgUrl上
a: angular自带指令:[hidden],[disable],[ngClass]...
b: 自定义组件的属性:(实现父子组件之间的通讯的重要途径)
c: HTML原生属性绑定
html原生属性只是纯粹的属性,它们没有对应的属性可供绑定,所以不能直接给原生属性绑定东东,angular在此场景下,以单项数据绑定的形式(难道就是表达式?)提供解决办法:
<tr><td [attr.colspan]='1+1' > </td></tr>
3)CSS类绑定
<button [style.color]=" isActive? 'red' : 'green' "></button> 这里样式属性可以是中线命名也可以是驼峰命名
4)事件绑定 形式:()
<input (keyup) = 'onSave($event)' (blur) =''> 这里也可以用 on-keyup的形式
a: 获取用户输入值的方法:
1.这里angular把事件对象存入$event中,可以用$event.target.value来获取用户输入的值
2.从模板引用变量中获得<input #box (keyup)='0' > 这里box就是模板引用变量,它引用的是input元素本身,所以取值直接是box.value
b:按键事件过滤
key:enter 只在用户按下回车键时触发
5)双向绑定
<input [value]="" (input)="" [(ngModel)] > 这里[ ]实现数据流从模板到组件,( )实现数据流从组件到模板,两者结合即实现双向绑定
6.指令
属性指令:ngModel,ngIf,ngFor等
结构指令:用来改变DOM树的结构
7.服务 Service
封装的某一特定功能以供复用,复用形式是依赖注入(injector控制反转?)貌似类似于angular1中的?但是代码形式不同
@Injectable()
Export class Service{
Add(){....} //功能函数
}
服务调用:
import {ServiceName} form 'url'
再设置component的providers属性
providers: [Userservice]
8.表单
1)使用angular自带CSS类来更新控件状态
控件已被访问过: ng-touched / ng-untouched
控件值已发生变化:ng-dirty/ng-pristine
2)提交表单 ngSubmit
<form (ngSubmit)='onSubmit()'></form>
Angular2 初学小记的更多相关文章
- python初学小记
使用PyCharm向世界打招呼! print (“Hello world!”) 介绍自己的基本信息的方法 name = input("name:")age = int(input( ...
- 入职15天,Angular2 小记!
ng 配置@ngModule({ imports: [ BrowserModule ], //导入模块 declarations: [ AppComponent ], //导入组件 providers ...
- Java基础学习小记--多态
题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪,特别对Coders来说,有几天不是加班到夜里.好吧,我承认对于初学Java的我, ...
- 解决Angular2 (SystemJS) XHR error (404 Not Found) loading traceur
初学Angular2,跟着Angular2中文网学到HTTP这一节时出现了一个异常: GET http://localhost:3000/traceur 404 (Not Found) Error: ...
- [Angular 6] 初学angular,环境全部最新,[ ng serve ] 不能启动,卡在 95% 不动 => 解决方案
2018.9.7 问题描述: 通过ng serve命令启动angular应用时,卡在95%, ctrl+c 停掉后看到错误内容为找不到ng_modules下的angular模块下的package.js ...
- Angular2配置文件详解
初学接触Angular2的时候,通过ng new your-project-name 命令生成一个工程空壳,本文来介绍下每个文件的作用及含义. 先来看看src的文件目录: 文件详解 File 文件 P ...
- 《C程序设计(第四版)》小记
我看的这本书很经典,它是谭浩强写的,也就是广为流传的“C语言红皮书”.在网上看了很多帖子,生活中也问过一些朋友,大多数人是不认可这本书的.很多人都说这本书很烂,看不懂,然后去“追逐”国外的一些教材.其 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
随机推荐
- Win32控制台、Win32项目、MFC项目、CLR控制台、CLR空项目、空项目区别
转载:https://blog.csdn.net/zfmss/article/details/79244696 1.Win32控制台 初始代码模版以main为程序入口,默认情况下,只链接C++运行时库 ...
- matlab中for 用来重复指定次数的 for 循环
参考:https://ww2.mathworks.cn/help/matlab/ref/for.html?searchHighlight=for&s_tid=doc_srchtitle for ...
- PADS Layout VX.2.3 灌铜之后没有显示整块铜皮的原因
操作系统:Windows 10 x64 工具1:PADS Layout VX.2.3 灌铜之后没有显示整块铜皮,如下图所示: 点击菜单Tools > Options...(快捷键:Ctrl + ...
- 【CSP2019-J】游记
看我朋友们的博客里面都写了游记,我也来凑个热闹(雾) day1# 介于是\(CSP-J\),我们是比赛当天走的,上午卡点到.一路上不允许玩游戏,于是就在路上看了一路的鬼畜视频,然后看了看对拍的板子(然 ...
- 达梦产品技术支持-DM8-数据库安装
(该文档只适合个人环境搭建,未涉及到数据库的各种参数配置,未涉及到数据库规划,若需要企业环境搭建请咨询专业人员) 基于Windows的安装 windows下安装是图形化界面,与linux下的图形化界面 ...
- 物联网wifi模块
物联网wifi模块 物联网wifi模块 是上海卓岚推出的MQTT+JSON转Modbus物联网WiFi核心模块.支持以MQTT的方式连接云端服务器,支持可以界面话配置,自主采集Modbus仪表/645 ...
- spring boot: 设计接口站api的版本号,支持次版本号(spring boot 2.3.2)
一,为什么接口站的api要使用版本号? 1,当服务端接口的功能发生改进后, 客户端如果不更新版本, 则服务端返回的功能可能不能使用, 所以在服务端功能升级后, 客户端也要相应的使用 ...
- linux(centos8):安装jmeter5.3
一,jmeter的用途: Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试, 它最初被设计用于Web应用测试,但后来扩展到其他测试领域. Apach ...
- centos8平台:用fontconfig安装及管理字体(fc-list/fc-match/fc-cache)
一,fc-list所属的rpm包 [root@blog ~]$ whereis fc-list fc-list: /usr/bin/fc-list /usr/share/man/man1/fc-lis ...
- centos8平台使用vmstat监控系统
一,vmstat的用途和特点: vmstat 是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数. 相对于 iostat 来说,vmstat 可 ...