ts安装和写法 angular安装及使用

1、全局安装

npm install -g typescript

2、将ts编译成js

tsc 文件名.ts   //找到文件目录

注:可能这里会报错  参考下图

 

ts包容性不错 如果str没加string编译报错,但是可以正确转换成js

function abc(person:string){
    return 'hello '+person
}
let str:string = '123'
console.log(abc(str))

转换以后

function abc(person) {
    return 'hello ' + person;
}
var str = '123';
console.log(abc(str));

3、安装angular-cli

npm install -g @angular/cli

4、创建项目

ng new 项目名字(英文)

router 安装和是否用less自己选择

5、运行项目

ng serve --open

6、项目中平时改动的地方是src里面的app,其他的很少动,package.json是项目的依赖

app.module.ts是根模块  用到的组件都要导入进来且声明

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component'; //导入

@NgModule({//装饰器 装饰的 class AppModule 
  declarations: [
    AppComponent //声明
  ],
  imports: [//导入的核心模块
    BrowserModule,//编译的
    AppRoutingModule
  ],
  providers: [],//自定义的服务,模块
  bootstrap: [AppComponent]//挂在的根组件,就是首页是哪个放那个
})
export class AppModule { }

7、typescript 数据类型

原始数据类型: 数值 布尔 字符串 null undefind

布尔类型定义

let isData:boolean = true
isData = false
let isData:boolean = Boolean(2) 直接调用Boolean是可以的

错误写法:因为new Boolean返回的是一个对象类型

let isData:boolean = new Boolean(2)

数值类型定义

let num:number = 1
let num16:number = 0xf00a
let nonNum:number = NaN
let infiNum:number = Infinity

字符串类型定义

let lname:string = 'joy';
let age:number = 30;
let box:string = `我的年龄是${age}`;
// 空值void  大多数定义函数没有返回值 ,一般不用于定义变量,因为一旦变量定义为void,赋值只能是undefined或者null
function hello():void{
    console.log('holle')
}

null和undefined定义  没什么意义,他们是所有类型的子类型

例如

let lname:string = 'joy';
lname=undefined
lname=null
//没啥意义
let a:undefined = undefined
a=null
let b:null = null
b=undefined
void类型是不能赋值给其他类型的,虽然他也只有undefined和null

let lname:string = 'joy';

lname=undefined

let abc:undefined = undefined

let dfe:void = undefined

lname = abc

lname = dfe //这样不允许 因为dfe是void类型

任意值类型 :any用来表示任意值类型赋值

let jsf:any = 'abf'
console.log(jsf.myname) //undefined 任意值类型允许访问他任意的属性
jsf = 123

// 未声明类型的变量
let wfkk1;//wfkk1在声明的时候未定义类型,就被定义成任意类型
let wfkk1 = 'sho';
let wfkk1 = 123;

let somethis = '132'//somethis虽然没有定义类型,但赋值未字符串。ts有类型推断规则,会将赋值定义成变量的类型
somethis = 123 // 报错

联合类型

表示取值可以取多个

// 联合类型
let cat:string|number;
cat = 123
cat = ''
let cat1:string|number = '猫咪';

ts接口  定义接口关键词 interface

接口:行为的抽象。具体的行动由类实现(接口抽象出来的内容) 相当于定义的描述

interface Peason{
    name:String;
    age:Number;
}
// 一般接口首字母都会大写  用接口定义的对象属性不能多写不能少写
let lay:Peason = {
    name:'tom',//约束tom必须和接口一样的属性
    age:30
}
let lay1:object = {
    name:'join',
    age:12
}


// 接口属性可写可不写
interface Student{
    name:String;
    age?:Number; //?说明类型可写可不写
}

let lack:Peason = {
    name:'abd',//约束tom必须和接口一样的属性
    age:30
}

// 多个任意类型可写可不写
interface Teacher{
    name: string;
    age?:number;
    [propName:string]:any //propName是自己随便定义的 string是必须是这个值,不能是number
}
let t1:Teacher = {
    name:'wang',
    age:34,
    school: '清华'
}

// 
interface Cat{
    readonly name:string;//只读属性只能赋值一次,后期不能重复定义,可以获取
    color:string;
    age:number;
}
let c1:Cat={
    name: 'mimi',
    color: 'red',
    age: 1
}
// c1.name = 'bo'//会报错
// implements 类实现接口的关键词
class SmallCat implements Cat{//定义一个SmallCat类,继承cat
    name:string = '小猫';
    color:string = 'red';
    age:number = 2;
    constructor(){//设置构造函数

    }
}
let c2 = new SmallCat()
console.log(c2.name) //c2的name也是只读属性,因为继承了cat,不能修改,只能获取

数组定义类型

// 设定数组定义类型
let arr = [1,2,3]//普通定义方法

// 写法一 普通的
let arr1:number[] = [1,2,3]//ts定义数组类型,在传入不能是别的类型
// 写法二 数组泛型的定义类型
let arr2:Array<number> = [1,2,3]

// arr1.push('str')//报错

// 写法三 接口表示数组类型  一般不用
interface NumArr{
    [index:number]:number
}
let arr3:NumArr = [1,2,3]
// arr2.push('str')//报错

 

 

 

 

 

 创建组件

ng -g component components/header

会自动创建components/header  根组件也给定义好了,别的页面引用 找header.component.ts里面selector的名字app-header;根组件引用<app-header></app-header>

定义类型推荐使用:public stu:string='str'

 

 

 

 

 

 

 

 

 

 

 

 

 

组件引入图片

 

 

 

 

 

 

 

 

 

方法直接不加逗号分号   

 

 

 

 

 

 

搜索记录功能 todolist

 

 

 

 

数据持久化  刷新不变化

 

 

 

 

 dom侧边栏动画

 

 

 

 

 

 

 

 获取子组件方法(viewchild)

父子组件传值

 

 

 

 

 

 

 

生命周期函数  有init的都触发一次

 

封装异步请求

 

 

 

 

 

 

多次执行

 

 

 

 返回偶数

 

 

 

 

 

 请求

 

 

 

 

 

 

 

 

jsonp跨域

router路由

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-12-08 23:03  瑶玲  阅读(1162)  评论(0编辑  收藏  举报