angular7一周学习
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一周学习的更多相关文章
- java第三周学习
这一周学习的是java数组面向对象 数组中存放的数据的类型:既可以是基本数据类型也可以是引用数据类型. 数组的定义方式: 1 数据类型[] 数组名; 2 数据类型 数组名[]; 数组的初始化: 1.静 ...
- 20145208 《Java程序设计》第0周学习总结
20145208 <Java程序设计>第0周学习总结 阅读心得 读了老师推荐的几个文章,虽然第四个文章"为什么一定要自学"报告资源不存在而无法阅读,其他的三篇文章都言之 ...
- Java 第十周学习总结
20145113<Java程序设计>第十周学习总结 基础知识 1.网络通讯的方式主要有两种 TCP(传输控制协议)方式:需要建立专用的虚拟连接以及确认传输是否正确 UDP(用户数据报协议) ...
- Java第八周学习总结
20145113第八周学习总结 第十五章学习内容 第15章比较琐碎,相对于之前章节也比较枯燥无味看了一部分,也动手敲了些 Logger logger = Logger.getLogger(" ...
- 20145212 《Java程序设计》第10周学习总结
20145212 <Java程序设计>第10周学习总结 学习内容总结 一.Java的网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net ...
- 20145212 《Java程序设计》第9周学习总结
20145212 <Java程序设计>第9周学习总结 教材学习内容总结 一.JDBC架构 1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插 ...
- 20145212 《Java程序设计》第8周学习总结
20145212 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以让你 ...
- 20145212 《Java程序设计》第7周学习总结
20145212 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 格林威治时间(GMT):通过观察太阳而得,因为地球公转轨道为椭圆形且速度不一,本身自传减速而造成误差. ...
- 20145212 《Java程序设计》第6周学习总结
20145212 <Java程序设计>第6周学习总结 学习内容总结 第十章 1.Java将输入/输出抽象化为串流.读取数据对象成为输入流,能向其写入的对象叫输出流. 我从网上找到了一个可以 ...
随机推荐
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统
使用 Kafka 和 Spark Streaming 构建实时数据处理系统 来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的技 ...
- 各数据库连接maven配置
Derbydb driver maven dependency<dependency> <groupId>org.apache.derby</groupId> &l ...
- 初识ActiveMQ
消息中间件的初步认识 什么是消息中间件? 消息中间件是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程 ...
- spring cloud feign覆写默认配置级feign client的日志打印
一.覆写fegin的默认配置 1.新增配置类FeignConfiguration.java package com.config; import org.springframework.context ...
- Ubuntu点击dash home就崩溃
很崩溃的一个问题,搞了好久.并没有很清楚的知道具体哪个细节导致的问题,只是大概知道了原因,以及搞出了一个解决方案. 问题描述 台式机,没有独立显卡,也就是只有一个intel CPU在一起的小破显卡(我 ...
- loss函数学习笔记
一直对机器学习里的loss函数不太懂,这里做点笔记. 符号表示的含义,主要根据Andrew Ng的课程来的,\(m\)个样本,第\(i\)个样本为\(\vec x^{(i)}\),对应ground t ...
- BootStrap标题制作模板
<!DOCTYPE html><html lang="zh-CN"> <head> <meta charset="UTF-8&q ...
- ES标准
精确来说,ES1 ~ ES5 中的数字是 ECMA-262 标准的版本号(edition). 即:Standard ECMA-262, 1st Edition(其实第一个版本是没有版本号的)Stand ...
- BFC的形成和排版规则
何为bfc? BFC(Block Formatting Context)直译为“块级格式化范围”.是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和 ...
- BZOJ5084[hashit]
题解: 后缀自动机 我们可以通过建立trie 把询问变成询问一些点的并 把trie建立成SAM和广义SAM基本相同,就是在父亲和儿子之间连边 然后就变成了询问树链的并 我们可以发现答案=sigma d ...