4 5区别 angular 和_angularJs和angular、vue、react对比

angularJs指2.0以下的版本,2.0以上都叫做angular

angularJs的优点

模板功能强大丰富

比较完善的前端mvc框架

引入java的概念

angularJs的一些问题

性能、路由、(不能嵌套路由)、作用域、表单验证、学习成本

angular的新特性

全新的命令行工具angularCli

服务端渲染

移动和桌面兼容

(50k)

与react对比

速度快(虚拟dom)

FLUX框架 (ui的组件化)

服务端渲染(预渲染,利于爬虫)

与vue对比

简单、灵活、性能(大小10k)、个人指导、只关注web

环境搭建(安装nodejs)

1、npm install -g @angular/ali

2、ng new 文件名

组件由 装饰器(@Component())+模板(Template)+控制器(controller)组成

所有组件由@Component()注解 ,组件装饰器里的属性就是元数据

3、启动angular服务

ng serve

4、创建组件

ng g component footer(组件名字)

5、angular的路由功能

配置路由

const routes: Routes = [

// Routes 配置的时候path前面一定不要是 "/"

{

path:'',

component:HomeComponent

},

{

path:'product',

component:ProductComponent

},

{

path:"**",

component:Code404Component

}

];

路由跳转 routerLink接受一个数组

主页

商品详情

点击事件跳转

export class AppComponent {

title = 'content';

constructor(private router:Router){}; //constructor获取路由

toDetail(){

this.router.navigate(['/product']) //跳转到某个位置 和routerLink类似

}

}

占位符,供加载组件的位置

传参的2种方法

查询参数(一)

商品详情

接受参数

// 接受传递过啦的id

private productId:number;

constructor(private roterId:ActivatedRoute) { }

//给productId赋值

ngOnInit() {

this.productId=this.roterId.snapshot.queryParams['id']

}

理由传参(二)

const routes: Routes = [

// Routes 配置的时候path前面一定不要是 "/"

{

path:'',

component:HomeComponent

},

{

path:'product/:id', -----------------------

component:ProductComponent -----------------

},

];

商品详情

取值

export class ProductComponent implements OnInit {

// 接受传递过啦的id

private productId:number;

constructor(private roterInfo:ActivatedRoute) { }

//给productId赋值

ngOnInit() {

//把queryParams改为params

this.productId=this.roterInfo.snapshot.params['id']

}

}

snapshot//参数快照 组件自身不会到自身

subscribe //参数订阅 组件自身到自身这种跳转

export class ProductComponent implements OnInit {

// 接受传递过啦的id

private productId:number;

constructor(private roterInfo:ActivatedRoute) { }

//给productId赋值

ngOnInit() {

//参数订阅

this.roterInfo.params.subscribe((params: Params) => this.productId = params['id'])

// 参数快照

// this.productId=this.roterInfo.snapshot.params['id']

}

}

6、重定向路由

const routes: Routes = [

// Routes 配置的时候path前面一定不要是 "/"

{

path:'',

redirectTo:'/home', //重定向路由

pathMatch:'full'

},

{

path:'home',

component:HomeComponent

},

{

path:'product/:id',

component:ProductComponent

},

{

path:"**",

component:Code404Component

}

];

7、子路由children

{

path:'product/:id',

component:ProductComponent,

children:[

{

path:'',

component:ProduceDescComponent

},

{

path:'sellor/:id',

component:SellorInfoComponent

}

]

},

8、路由守卫

使用方法

路由的ts里面去写

import { NgModule } from '@angular/core';

import { Routes, RouterModule } from '@angular/router';

import { loginGuard } from './guard/login_guard';

import { unsaveGuard } from './guard/unsave_guards';

const routes: Routes = [

// Routes 配置的时候path前面一定不要是 "/"

{

path:'',

redirectTo:'/home', //重定向路由

pathMatch:'full'

},

{

path:'product/:id',

component:ProductComponent,

children:[

{

path:'',

component:ProduceDescComponent

},

{

path:'sellor/:id',

component:SellorInfoComponent

}

],

canActivate:[loginGuard],---------------------------------

canDeactivate:[unsaveGuard]-------------------

},

{

path:"**",

component:Code404Component

}

];

@NgModule({

imports: [RouterModule.forRoot(routes)],

exports: [RouterModule],

providers:[loginGuard,unsaveGuard] ----------------------------

})

export class AppRoutingModule { }

CanActivate的使用方法

import { CanActivate } from '@angular/router';

export class loginGuard implements CanActivate{

canActivate(){

let loggedIn:boolean=Math.random()<0.5

if(!loggedIn){

console.log("用户未登陆")

}

return loggedIn;

}

}

CanDeactivate 的使用方法

import { CanDeactivate } from '@angular/router';

import { ProduceDescComponent } from '../produce-desc/produce-desc.component';

export class unsaveGuard implements CanDeactivate{

canDeactivate(component:ProduceDescComponent){

return window.confirm("当前页面没有保存,你确定要离开吗,")

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值