ng new xxx 创建一个项目

ng serve --open 执行一个项目

angular 使用socket.io 报错

找到polyfills.ts添加

(window as any).global=window;

ts语法

 let numbers1: number[] = [1, 2];
let numbers2: Array<number> = [1, 2, 3];
// 另外一种定义数组类型的方式,与nunber[]等价
// Tuple(元组类型)
let t: [string, number] = ['No.', 1];
// Enum(枚举)
enum Operator1 { Add, Update, Delete, Select };
let opt1: Operator1 = Operator1.Add;
// opt1的值为0。取枚举项的默认值。
enum Operator2 { Add = 1, Update, Delete, Select };
let opt2: Operator2 = Operator2.Update;
// opt2的值为2。当某一项设置了值后,后续项的值都顺次加1。
let opt2Name: string = Operator2[2];
//any 任意
//void 空
// 强制类型转换
let obj1: any = 'This is a string.';
let len: number = (<string>obj1).length;
len = (obj1 as string).length;
//箭头函数
const s=(a:string,b:string):any=>{
return '1'
};
let sayHello=function(word:string='hello'):string{
return 'say'
};
//在参数后用 ? 来表示,可选参数只能在必须参数后(可选参数)
//默认参数 name:string='hello'
//并在参数前加上省略号,剩余参数只能是最后一个参数
(name:string,word?:string,...age:string[])
//lambda表达式( () => {} )
//类
//public 成员默认的
//private 只能在自身类可用,
//protected可在继承类中使用
//static 静态的属性和方法
属性的get和set访问器

函数重载

function pickCard(x: {suit: string, card: number}[]): number;
function pickCard(x: number): {suit: string, card: number};
function pickCard(x: any): any {
if (typeof x == "object") {
let pickedCard = Math.floor(Math.random() * x.length);
return pickedCard;
} else if (typeof x == 'number') {
let pickedSuit = Math.floor(x / 13);
return {
suit: suits[pickedSuit],
card: x % 13,
}
}
}

函数继承

extends super

类修饰符

public :公有
protedcted :保护类型 在类里面,子类可访问,类外部不能访问
private: 私有 在类里面访问
属性不加修饰符,默认公有(public)

静态属性和静态方法

static name='xx';
static say(){}
静态方法不能直接调用类的属性

多态

多态也属于继承
父类定义一个方法不去实现,让他继承的每一个子类去实现(每个子类的表现形式不一样)

抽象

提供其他类继承的基类,不能直接被实例化

并且需要在派生类中实现
abstract 抽象方法只能放在抽象类里面
abstract class Animal{
public name:string; constructor(name: string) {
this.name=name;
}
//抽象方法只能放在抽象类中
//用abstract关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现
abstract eat():any;
}
//不能被实例化
class Dogs extends Animal{
constructor(name: any) {
super(name);
}
eat(){
console.log(this.name + 'xxx');
}
}

接口

对传入的对象进行约束
/* 接口: 行为和动作的规范,对批量方法进行约束*/
//interface
//就传入对象的约束 属性的接口
//readonly 只读
interface FullName {
firstName:string;
secondName?:string; //可选属性
readonly name:string; //只读参数
} function printName(name: FullName) {
console.log(name.firstName + '---' + name.secondName);
}
let obj={
age:20,
firstName:'zz',
secondName:'san'
};
printName(obj);
//参数的顺序可以不一样
printName({firstName:'xxx',secondName:'xxx'}); 函数类型的接口
interface encrypt{
(key:string,value:string):string;
}
let md5:encrypt=function(key:string,value:string):string{ }
可索引的接口(对数组的约束)
interface User{
[index:number]:string
}
类类型接口:对类的约束和抽象类有点相似
interface Animal{
name:string;
eat(str:string):void;
}
class Dog implements Animal{
name:string;
constructor(name:string){
this.name=name;
}
eat(){ }
}
接口的扩展:接口的继承方法
interface Animal{
eat():void;
}
interface Person extends Animal{
work():void;
}
也可以继承和接口的继承
继承多个接口
interface Shape{
eara():number
}
interface Type{
type:string
}
interface Circle extends Shape,Type{ }

泛型

泛型就是解决类  接口  方法的复用性,以及对不确定数据类型的支持
<T>
<number> function getMin<T>(arr:T[]):T{ }
传入的参数 [1,2,3,4] ['a','b','c','d']
泛型类
class GetMin<T>{
min():T{ }
}

创建组件

ng g component components/news

基础知识

绑定属性
<div [title]="msg">鼠标附上去</div>
绑定html
<div [innerHTML]="content"></div> *ngFor="let item of list"
拿到循环的索引
<li *ngFor="let item of arr; let i=index">
*ngIf 做条件判断
//ngSwitch ngSwitchCase
<span [ngSwitch]="orderStatus">
<p *ngSwitchCase="1">表示已经支持</p>
<p *ngSwitchCase="2">确认订单</p>
<p *ngSwitchDefault>默认显示</p>
</span>
[ngClass] [ngStyle]
管道符
{{today|date:'yyyy-MM-dd HH:mm:ss'}}
{{peopleInfo|json}} 转成json格式
事件
(click)="run()"
//按下事件 字母都小写 监听事件
(keydown)="keyDown($event)"
e.keyCode == 13
###
重要
双向数据绑定
表单才有双向数据绑定
在app.module.ts 引入
import {FormsModule} from '@angular/forms';
imports: [
FormsModule
],
<input type="text" [(ngModel)]="title">

组件通信

父子组件传值

父组件
属性 [title]="title" 方法 [run]="run" 把父亲的整个this 传给子组件 [hun]="this"
子组件中
xxx.component.ts
引入 Input模块
import { Component, OnInit ,Input} from '@angular/core';
//接受父组件传入的数据,就可以使用啦
@Input() title:any;
@Input() hun:any; 父组件获取子组件的数据 //定义id
<app-header #footer></app-header>
//导入模块 ViewChild
import { Component, OnInit ,ViewChild} from '@angular/core';
//在class里面
@ViewChild('footer') footer:any;
//通过 this.footer.xx 获取子组件的数据 子传父 引入 Output EventEmitter
import { Component, OnInit ,Input,Output,EventEmitter} from '@angular/core';
@Output() private outer = new EventEmitter();
//在执行方法的时候把子组件的数据传入父组件
sendParent(){
this.outer.emit('我是子组件的数据');
}
父组件
<app-header (outer)="run($event)"></app-header>
run(value){
//value 拿到父组件的数据
console.log(value);
}

setter

拦截@input属性 进行操作
//子组件
public _textContent:string;
@Input()
set textContent(text: string){
this._textContent = text?text:'没有';
} ;
get textContent(){
return this._textContent
}

生命周期

ngOuInit()  初始化生命周期
ngAfterViewInit() DOM操作的生命周期
ngOnDestroy() 销毁的生命周期

服务

公共的功能放在服务里面
创建服务
ng g service services/xxx 在app.module.ts引入服务
//引入服务
import {StorageService} from './services/storage.service'
//配置服务
providers: [StorageService],
在要用的组件里面
//引入服务
import {StorageService} from '../../services/storage.service'
//导入服务
constructor(public storage:StorageService) {
let s= this.storage.get();
console.log(s);
}

Rxjs(通信不懂)

异步获取数据
Rxjs 通信

angular 中数据交互

在app.module.ts

//引入HttplientModule
import {HttpClientModule} from '@angular/common/http'
imports: [
+ HttpClientModule
],
//在子组件中
import {HttpClient} from '@angular/common/http'
//在方法中
this.http.get('xxx').subscribe(res=>{
console.log(res)
}) Post请求
在子组件中
import {HttpClient,HttpHeaders} from '@angular/common/http'
constructor(public http:HttpClient){}
//在方法中
//设置请求头(需要设置请求头)
const httpOptions={headers:new HttpHeaders({"Content-Type":"application/json"})}
this.http.post('url',{参数key:value},httpOptions).subscribe(
res=>res
) Angular 引入jsonp

路由

在app-routing.module.ts
引入组件
{
path:'xx',
component:xxx
}
<a routerLink="/heroes">Heroes</a>
//路由出口
<router-outlet></router-outlet>
//路由选中
routerLinkActive="active"

问号传参

<ul>
<li *ngFor="let item of list1;let i=index">
<a [routerLink]="['/home']" [queryParams]="{aid:i}">{{item}}</a>
</li>
</ul>
//在ts中
import {ActivatedRoute} from '@angular/router'
constructor(public route:ActivatedRoute) { }
this.route.queryParams.subscribe(data=>{
console.log(data);
})
获取问号传参的值

动态路由

 redirectTo: '/dashboard'  重定向
//配置连路由
{
path:'xxx/:id'
}
<li *ngFor="let item of list1;let key=index">
<a [routerLink]="['/home',key]">{{item}}</a>
</li>
// <a routerLink="/detail/{{item.id}}"></a> import {ActivatedRoute} from '@angular/router'
constructor(public route:ActivatedRoute) { }
this.route.params.subscribe(data=>{
console.log(data); //这样拿到的是变化后的值
})

路由导航

import {Router} from '@angular/router'

 constructor( public router:Router) { }
goNew(){
this.router.navigate(['/fome'])
} 传参跳转
import {Router,NavigationExtras} from '@angular/router'
goNew(){
let queryParams:NavigationExtras={
queryParams:{'aid':123}
}
this.router.navigate(['/fome'],queryParams)
}

子路由

{
//注意路径中不能加 / 号 ,会报错
path:'xxx',
component:xxx,
children:[
{
path:'xxx',
component:xxx
},
{
path:'',
component:xxx
},
{
path:'**',
component:xxx
}
]
}

获取当前路由的参数

    console.log(this.route.snapshot.queryParams);

Day.js 时间插件

angular7一周学习的更多相关文章

  1. java第三周学习

    这一周学习的是java数组面向对象 数组中存放的数据的类型:既可以是基本数据类型也可以是引用数据类型. 数组的定义方式: 1 数据类型[] 数组名; 2 数据类型 数组名[]; 数组的初始化: 1.静 ...

  2. 20145208 《Java程序设计》第0周学习总结

    20145208 <Java程序设计>第0周学习总结 阅读心得 读了老师推荐的几个文章,虽然第四个文章"为什么一定要自学"报告资源不存在而无法阅读,其他的三篇文章都言之 ...

  3. Java 第十周学习总结

    20145113<Java程序设计>第十周学习总结 基础知识 1.网络通讯的方式主要有两种 TCP(传输控制协议)方式:需要建立专用的虚拟连接以及确认传输是否正确 UDP(用户数据报协议) ...

  4. Java第八周学习总结

    20145113第八周学习总结 第十五章学习内容 第15章比较琐碎,相对于之前章节也比较枯燥无味看了一部分,也动手敲了些 Logger logger = Logger.getLogger(" ...

  5. 20145212 《Java程序设计》第10周学习总结

    20145212 <Java程序设计>第10周学习总结 学习内容总结 一.Java的网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net ...

  6. 20145212 《Java程序设计》第9周学习总结

    20145212 <Java程序设计>第9周学习总结 教材学习内容总结 一.JDBC架构 1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插 ...

  7. 20145212 《Java程序设计》第8周学习总结

    20145212 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以让你 ...

  8. 20145212 《Java程序设计》第7周学习总结

    20145212 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 格林威治时间(GMT):通过观察太阳而得,因为地球公转轨道为椭圆形且速度不一,本身自传减速而造成误差. ...

  9. 20145212 《Java程序设计》第6周学习总结

    20145212 <Java程序设计>第6周学习总结 学习内容总结 第十章 1.Java将输入/输出抽象化为串流.读取数据对象成为输入流,能向其写入的对象叫输出流. 我从网上找到了一个可以 ...

随机推荐

  1. cf1132G 线段树解分区间LIS(一种全新的线段树解LIS思路)+单调栈

    /* 给定n个数的数列,要求枚举长为k的区间,求出每个区间的最长上升子序列长度 首先考虑给定n个数的数列的LIS求法:从左往右枚举第i点作为最大点的贡献, 那么往左找到第一个比a[i]大的数,设这个数 ...

  2. Little Red Riding Hood

    问题 : Little Red Riding Hood 时间限制: 1 Sec  内存限制: 1280 MB 题目描述 Once upon a time, there was a little gir ...

  3. linux更好看的top界面htop

    top命令界面 性能测试时会经常用到top命令百用百顺就是样式不太美,下面介绍htop一个看起来更漂亮的top界面 安装htop yum install htop 安装完成键入htop命令,这样看起来 ...

  4. jenkins默认会存放目录

    jenkins默认会存放在用户主目录下的.jenkins文件夹中 如:Linux root用户:/root/.jenkins 注意:这是linux版本的.windows系统请自行更改.这个值在Jenk ...

  5. 外部引入的js 判断js脚本加载是否完成,完成后执行 相应的动作(以引入百度地图js为例)

    可以使用JQuery的 $.getScript(url,function(){});方法 $.getScript("http://api.map.baidu.com/getscript?v= ...

  6. VS2017远程调试C#或 Visual Studio 中的 Visual Basic 项目

    来源:远程调试C#或 Visual Studio 中的 Visual Basic 项目 若要调试已部署在另一台计算机的 Visual Studio 应用程序,安装和在其中部署您的应用程序的计算机上运行 ...

  7. fatal error c1001 编译器中发生内部错误 OpenMesh6.3

    Internal Compiler Error VS 2015 Update1 VS2015 Update1 编译OpenMesh的额代码时发生错误 fatal error c1001 编译器中发生内 ...

  8. VS2013 快捷键 与 RESHARPER 冲突(转)

    1.VS设置工具-->选项-->环境-->键盘-->重置 2.RESHARPER -->Options-->Environment → Keyboard & ...

  9. noip2017逛公园

    题解: 之前知道正解并没有写过.. #include <bits/stdc++.h> using namespace std; #define rint register int #def ...

  10. 1900型USB接口扫描枪设置虚拟串口模式提升扫描速度

    在使用扫描枪的过程中,发现扫描二维码速度比较慢,不到100个字符,花了大概2-3秒的时间才完成显示,这个速度不能忍受啊.通过度娘,说是可以将USB键盘模式接收字符转换成虚拟串口接收,这样可以大大提高速 ...