📜  Angular 2教程(1)

📅  最后修改于: 2023-12-03 15:13:23.104000             🧑  作者: Mango

Angular 2教程

Angular 2是一个流行的前端JavaScript框架,它是用TypeScript编写的,它采用了组件化的思想,使得构建复杂的单页应用变得更加容易。

本教程将从基础概念、组件、数据绑定、服务、路由等方面介绍Angular 2的使用。

基础概念
TypeScript

先了解一下TypeScript,它是JavaScript的超集,增加了一些新特性,例如静态类型、类、接口等,更适合大型项目和团队开发。Angular 2是用TypeScript编写的,因此需要先了解一下TypeScript。

模块化

Angular 2采用了模块化的思想,在代码量很大的时候能够更好地管理依赖关系和代码结构。

组件化

Angular 2使用组件化的思想,每个组件都有自己的HTML、CSS和JavaScript代码,它们紧密相连并相互作用,组成一个完整的单页应用,每个组件都有自己的状态和生命周期,组件之间的通信也变得更加容易。

模板语法

Angular 2使用HTML和模板来构建用户界面,HTML中嵌入的元数据确立了页面之间的数据流,通过模板语法,我们可以更方便地将数据渲染到页面上,同时也可以响应用户的交互事件。

组件
@Component装饰器

每个组件都应该使用@Component装饰器来声明它是一个组件,并定义一些元数据。这些元数据包括选择器、模板、样式、输入输出等等。

@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css']
})
export class AppComponent {
    title = 'My App';
}
组件交互

组件之间的交互通过@Input和@Output装饰器来实现。@Input用于从父组件向子组件传值,@Output用于从子组件向父组件传值。

// 父组件代码
@Component({
    selector: 'parent',
    template: `
        <child [count]="count" (change)="onChildChange($event)"></child>
    `
})
export class ParentComponent {
    count = 0;
    
    onChildChange(count: number) {
        this.count = count;
    }
}

// 子组件代码
@Component({
    selector: 'child',
    template: `
        <button (click)="increment()">Count: {{ count }}</button>
    `
})
export class ChildComponent {
    @Input() count: number;
    @Output() change = new EventEmitter<number>();
    
    increment() {
        this.count++;
        this.change.emit(this.count);
    }
}
数据绑定
单向绑定

通过单向绑定,我们可以将组件的数据渲染到模板上。

<h1>{{ title }}</h1>
<button [disabled]="isDisabled">Click me</button>
双向绑定

双向绑定是一种将组件的数据与模板中的表单元素进行绑定的方式,当表单元素的值发生变化时,组件的数据也将随之更新。

<input [(ngModel)]="name">
服务
@Injectable装饰器

服务是Angular 2中的一个重要概念,用于处理各种数据/逻辑层面的功能,服务通常是单例的,可以在多个组件中共享。

@Injectable()
export class MyService {
    getData() {
        return 'data';
    }
}
依赖注入

服务的实例通过依赖注入的方式来使用。

// 定义一个组件
@Component({
    selector: 'app-root',
    template: `
        <h1>{{ data }}</h1>
    `
})
export class AppComponent {
    data: string;
    
    constructor(private myService: MyService) {
        this.data = myService.getData();
    }
}
路由
路由概念

路由是Angular 2中的一个重要功能,它用于控制组件之间的显隐,通过路由,我们可以在不同的页面之间进行切换。

RouterModule

RouterModule是Angular 2中的路由模块,通过它,我们可以配置路由、定义路由守卫等等。

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

// 定义路由
const appRoutes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'about', component: AboutComponent },
  { path: '**', redirectTo: 'home' }
];

// 添加路由
@NgModule({
  imports: [
    RouterModule.forRoot(
      appRoutes,
      { enableTracing: true } // <-- debugging purposes only
    )
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }
路由Outlet

路由Outlet是一个指令,用于标识路由出口,当路由发生变化时,对应的组件会被渲染到这个出口上。

<router-outlet></router-outlet>
路由可观察对象

路由可观察对象是一个被路由器发布的事件流,每当路由发生变化时,该事件流就会发射出一个新的路由状态。

constructor(private route: ActivatedRoute) {
  this.route.params.subscribe(params => console.log(params));
}
总结

Angular 2是一个强大的框架,采用了组件化和模块化的思想,使得构建单页应用变得更加容易和灵活。本教程只涵盖了最基础的内容,更多深入的知识需要进一步学习。