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 初学小记的更多相关文章

  1. python初学小记

    使用PyCharm向世界打招呼! print (“Hello world!”) 介绍自己的基本信息的方法 name = input("name:")age = int(input( ...

  2. 入职15天,Angular2 小记!

    ng 配置@ngModule({ imports: [ BrowserModule ], //导入模块 declarations: [ AppComponent ], //导入组件 providers ...

  3. Java基础学习小记--多态

    题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪,特别对Coders来说,有几天不是加班到夜里.好吧,我承认对于初学Java的我, ...

  4. 解决Angular2 (SystemJS) XHR error (404 Not Found) loading traceur

    初学Angular2,跟着Angular2中文网学到HTTP这一节时出现了一个异常: GET http://localhost:3000/traceur 404 (Not Found) Error: ...

  5. [Angular 6] 初学angular,环境全部最新,[ ng serve ] 不能启动,卡在 95% 不动 => 解决方案

    2018.9.7 问题描述: 通过ng serve命令启动angular应用时,卡在95%, ctrl+c 停掉后看到错误内容为找不到ng_modules下的angular模块下的package.js ...

  6. Angular2配置文件详解

    初学接触Angular2的时候,通过ng new your-project-name 命令生成一个工程空壳,本文来介绍下每个文件的作用及含义. 先来看看src的文件目录: 文件详解 File 文件 P ...

  7. 《C程序设计(第四版)》小记

    我看的这本书很经典,它是谭浩强写的,也就是广为流传的“C语言红皮书”.在网上看了很多帖子,生活中也问过一些朋友,大多数人是不认可这本书的.很多人都说这本书很烂,看不懂,然后去“追逐”国外的一些教材.其 ...

  8. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  9. Angular2学习笔记(1)

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

随机推荐

  1. 剑指Offer(三):从尾到头打印链表

    一.前言 刷题平台:牛客网 二.题目 输入一个链表,返回一个反序的链表. 1.思路 通常,这种情况下,我们不希望修改原链表的结构.返回一个反序的链表,这就是经典的"后进先出",我们 ...

  2. CentOS openssh升级到openssh-7.2版本

    查看现在的版本SSH -V 一.准备 备份ssh目录(重要) cp -rf /etc/ssh /etc/ssh.bak [ 可以现场处理的,不用设置 安装telnet,避免ssh升级出现问题,导致无法 ...

  3. juc包:使用 juc 包下的显式 Lock 实现线程间通信

    一.前置知识 线程间通信三要素: 多线程+判断+操作+通知+资源类. 上面的五个要素,其他三个要素就是普通的多线程程序问题,那么通信就需要线程间的互相通知,往往伴随着何时通信的判断逻辑. 在 java ...

  4. Vue路由History模式分析

    Vue路由History模式分析 Vue-router是Vue的核心组件,主要是作为Vue的路由管理器,Vue-router默认hash模式,通过引入Vue-router对象模块时配置mode属性可以 ...

  5. mysql任意文件读取漏洞复现

    前言 第一次得知该漏洞后找了一些文章去看. 一开始不明白这个漏洞是怎么来的,只知道通过在服务端运行poc脚本就可以读取客户端的任意文件,直接找到网上准备好的靶机进行测试,发现可行,然后就拿别人的poc ...

  6. 通过MapReduce降低服务响应时间

    在微服务中开发中,api网关扮演对外提供restful api的角色,而api的数据往往会依赖其他服务,复杂的api更是会依赖多个甚至数十个服务.虽然单个被依赖服务的耗时一般都比较低,但如果多个服务串 ...

  7. 发布MeteoInfo Java 1.2.2

    主要更新了MeteoInfoLab至0.2版,已经有一些实用功能了,这里做些简单的介绍. 下载地址1,MeteoInfo网站:http://www.meteothinker.com/下载地址2,百度云 ...

  8. vm虚拟机设置共享文件夹不显示

    1. 确认VMtools已经装好,开启共享文件夹,设置好共享目录 2.执行命令 sudo mount -t vmhgfs .host:/ /mnt/hgfs如果出现错误: Error: cannot ...

  9. vue知识点14

    1. 父组件给子组件传值    1)<组件  属性="传改子组件的值"></组件>       v-bind:属性="识别数据类型和变量" ...

  10. 网络爬虫养成记(第一天)——安装Scrapy

    古人云:工欲善其事,必先利其器.在网络爬虫中,Scrapy无疑是一把利器,那么,今天我们来谈谈Scrapy的安装. 幸运的是,Scrapy已经支持Python3.4+了,也就是说,我们可以在pytho ...