angular2.x学习笔记

这篇笔记介绍了Angular的基本使用,包括Angular CLI的安装和项目创建,组件和服务的创建与使用,数据绑定、事件处理和DOM操作。详细讲解了Angular的路由配置和导航,以及生命周期钩子的各个阶段。还涵盖了HTTP请求、RxJS流操作和动画效果。此外,提到了如何处理跨域请求和使用第三方库如axios。
摘要由CSDN通过智能技术生成

angular


总结

这篇笔记写得比较粗糙,对于angular2.x简单开发应该是够了,前提是要有一点点typescript基础知识,如果有不对的地方烦请指出。


angularCLI

安装脚手架: npm install -g @angular/cli

查看脚手架版本:ng v

新建项目:ng new 项目名称 --skip-install // 创建新项目不做下载我一般改用cnpm,其他工具也可以

运行项目:在文件所在目录命令行ng serve --open

创建新组件:ng g component /components/news

使用组件:xxx.component.ts里的selector就是标签名

新建服务:ng g service 目录/服务名 使用方法下面有详解

angular基础

定义数据:public msg:*string* = '定义对象使用any类型';

绑定数据:<p>{{msg}}</p>

绑定属性:中括号括住属性<div [title]="msg">{{msg}}</div>

解析html:<div [innerHTML]="myHtml"></div>

数组循环:<li *ngFor="let item of arr">{{item}}</li>

样式控制:<div [ngClass]="{'red': flag}">我是ngclass控制的样式</div>

style控制:<div [ngStyle]="{'fontSize': '20px'}">字体大小为20px</div>

管道:<div>管道{{toDay}}-{{toDay | date:"YYYY-MM-dd HH:mm:ss"}}</div> // 我也不是很理解

事件及 事件对象:<button (click)="cli($event)">点击</button>

做表单双向数据绑定之前先在module.ts里面引入import {FormsModule} from ‘@angular/forms’ 然后在imports数组的声明

表单的双向数据绑定:<input *type*="text" *[(ngModel)]*="data">

angulae服务:ng g service 目录/服务名 这个服务感觉就是注册全局方法

引入并配置服务:在module.tsimport {StorageService} from './目录名/服务名.servicr'并在@NgModule里的providers数组里添加StorageService然后哪里需要哪里引,还要在构造函数里作为参数传进去public 取个名字:StorageService用的时候就是this.取的名字…

angularDom操作1:可以用原生的

angularDom操作2:viewChild 给html定名字<div #名字></div> 然后组件核心模块中引入,节点获取方法@ViewChild('名字') 变量:any(不能在方法里调用),这就相当于把节点获取到变量了。这个变量如果是组件的话就相当于这个组件的实例,可以调用组件里的方法

angularCss3动画:就是用操作dom的css

父组件给子组件传值:调用组件写入自定义属性<app-header [name]='name'></app-header>,子组件ts引入Input核心模块@Input() name:string;,name就是传过来的值,方法也算同样发传法,传方法注意不要加(),且类型是any,把整个父组件传给子组件,[name]='this'

子组件给父组件传值:用viewChild在上面以经有了

Rxjs异步流:

import {map} from 'rxjs/operators' // 引入工具函数
getRxjs() {
   return new Observable((observer) => {
     	// 这个定时器也可以改成重复定时器,支持多次返回数据
       setTimeout(()=>{
       let data:string = 'rxjs里的数据';
       observer.next(data);
       // observer.error(errorData); 失败返回
     },3000)
   })
 }

let rxjsData = this.req.getRxjs();

let rxjsObj = rxjsData.subscribe((value) => {
      console.log(value);
})

rxjsObj.unsubscribe(); // 撤回订阅

// 使用工具方法
rxjsData.pipe(
      map((value) => {
        return value+'111';
      })
    ).subscribe((value) => {
        console.log(value);
      })

angular Get请求:先在module.ts中引入import {HttpClientModule} from '@angular/common/http' 然后在imports数组中添加。然后在用到的地方引入import {HttpClient} from '@angular/common/http',并在构造函数中声明constructor(public http:HttpClient){},使用是this.http.get()

  getReq() {
    this.http.get(this.apUrl).subscribe((value)=> {
      console.log(value);
    })
  }

angular Post请求:比get请求要多引入一个HttpHeaders``import {HttpClient, HttpHeaders} from '@angular/common/http然后设置请求头 private httpHeader:any = {headers: new HttpHeaders({‘Content-Type’: ‘application/json’})}`

  postReq() {
    this.http.post(this.apUrl2,{传数据},this.httpHeader)
    	.subscribe((value)=> {
      		console.log(value);
    })
  }

angularJSONP请求:先在module.ts中引入import {HttpClientModule,HttpClientJsonpModule} from '@angular/common/http' 然后在imports数组中添加。使用所在构造函数中声明constructor(public http:HttpClient){},然后用jsonp方法,不作详解

第三方请求使用axios:该咋用咋用

angular跨域请求代理:先搞个json文件代码如下,再在angular.json里的serve.options加入配置:“proxyConfig”: “proxy.conf.json”

## 最简版
{
  "/aa": {
    "target": "http://localhost:8080/server/server.php"
  }
}
## 完整版,不太理解,简单的能用就好了
{
  "/api-weather": {    //需要代理的请求: http://localhost:4200/api-weather
    "target": "http://t.weather.sojson.com",//反向代理到target,请求变成:http://t.weather.sojson.com/api-weather
    "logLevel": "debug", //打印代理过程
    "changeOrigin": true,
    "secure": false,
    "pathRewrite": {
        "^/api-weather": ""  //将/api-weather替换为空,新的请求变成:http://t.weather.sojson.com
    }
  }
}

angular路由

1、先创建带路由的项目

2、然后创建需要的组件

3、再路由模块引入所要映射的组件

4.配置路由(路由不带/)const routes: Routes = [{path:'home',component: HomeComponent}],a链接是<a routerLink='/home'>首页</a>

5、匹配不到路由时默认跳转路由(默认挂载组件){path: '**',redirectTo:'home'}

6、选中状态<a routerLink="/news" routerLinkActive="css类名">news</a>

7、get传值:<a [routerLink]="[ '/newscontent' ]" [queryParams]="{id:key}">新闻详情</a>

8、子组件获取get传值:先引入模块import { ActivatedRoute } from '@angular/router';然后在构造函数中声明constructor(public *route*:ActivatedRoute) { },取值*this*.route.queryParams.subscribe((*value*)=>{console.log(*value*);})

9、动态传值:定义路由{path:'home/:index',component: HomeComponent},使用路由<a *ngFor="let item of items,let key = index" [routerLink]="[ 'home/',key ]" >home</a>,取值跟上一条一样,取值部分this.route.params.subscribe((value)=>{console.log(value);

10、动静态路由js跳转:引入import { Router } from '@angular/router';,构造函数注入constructor(public router:Router) {}静态跳转this.router.navigate(['/news']),动态跳转this.router.navigate(['/home','123'])

11、jsGet传值跳转:引入import {Router,NavigationExtras } from '@angular/router';,注入constructor(public router:Router) {},使用:

goNewsContent() {
    let navigationExtras:NavigationExtras = {
      queryParams:{name:'zhangsan',age:20},
      fragment:'lll'
    }
    this.router.navigate(['newscontent'],navigationExtras);
  }

12、嵌套路由:

// 路由定义
{
    path: 'home',
    component: HomeComponent,
    children: [
      { path: 'homelist', component: HomelistComponent },
      { path: 'homecontent', component: HomecontentCompon}{ path: '**', redirectTo: 'homelist' } // 默认
    ]
  }
// 链接跳转 // 带上父路径
 //<a [routerLink]="[ '/home/homelist']">homelist</a>
 //<a [routerLink]="[ '/home/homecontent']">homecontent</a>
// 组件显示 //<router-outlet></router-outlet>
  //<div class="right">
    //<router-outlet></router-outlet>
  //</div>

angular生命周期钩子

ngOnInit(){}:组件和指令初始化完成,并不是正真的dom加载完成(一般用来请求数据)

ngDoCheck(){}:检测并在发生Angular无法或不愿意自己检测的变化时做出反应

ngOnChanges(){}:当被绑定的输入属性的值发生改变时调用(父子组件传值会触发)

ngAfterContentInit(){}:当把外部内容投影进组件之后调用。

ngAfterContentChecked():每次完成被投影组件内容的变更检测之后调用

ngAfterViewInit(){}:视图加载完成后触发的方法 dom加载完成 (dom操作尽量在这里做)

ngAfterViewChecked():每次做完组件视图和子组件视图的变更检测之后调用

ngOnDestroy():组件销毁前

页面初始化: ngOnInit 》 ngDoCheck 》 ngAfterContentInit 》ngAfterContentChecked 》 ngAfterViewInit 》 ngAfterViewChecked

数据改变: ngDoCheck 》ngAfterContentChecked 》 ngAfterViewChecked

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值