Angular được biết đến là framework mã nguồn mở được sử dụng để tạo các ứng dụng web mang tính hiện đại và năng động. Nếu bạn mới bắt đầu tìm hiểu về Angular thì chắc hẳn sẽ cần nền tảng kiến thức cơ bản về thư viện và framework này. Vậy học Angular cho người mới bắt đầu cần chú trọng đến những chủ đề nào?
Đọc bài viết sau đây để được giải đáp chi tiết hơn về:
- Những thành phần cơ bản và cần thiết trong lộ trình học Angular cho người mới bắt đầu
- Cách tạo Angular Application đơn giản và dễ hiểu
Angular là gì?
Angular là một framework Javascript được viết bằng TypeScript và phát triển bởi Google. Các lập trình viên front-end thường sử dụng Angular để thao tác dữ liệu trong phát triển web hiệu quả hơn. Trong phiên bản mới nhất, Angular được cải tiến hiệu quả hơn, các chức năng cốt lõi được chuyển sang module khác nhau.
Angular đã vượt qua các chức năng của JavaScript để phát triển ứng dụng với điểm nổi bật như module, khả năng kiểm tra và năng suất của developer.
Đọc thêm: Angular là gì? Có phải là vũ khí hạng nặng của Front-end Developer?
Các chủ đề cơ bản trong lộ trình học Angular cho người mới bắt đầu
Đối với những bạn mới bắt đầu tìm hiểu về Angular, bạn sẽ cần nắm vững một số chủ đề cơ bản về Angular, cụ thể như sau:
Angular Expression
Trong Angular, biểu thức (expressions) được sử dụng để hiển thị dữ liệu động trong template. Angular sử dụng cú pháp nội suy (interpolation) với dấu ngoặc nhọn kép {{ }} để hiển thị giá trị của biểu thức.
Biểu thức trong Angular rất giống với biểu thức trong JavaScript, có thể chứa các ký tự, toán tử và biến. Ví dụ như:
// app.component.ts import { Component } from '@angular/core'; @Component({ selector: 'app-root', template: ` <h1>Angular Expression Example</h1> <p>This is an expression: {{ 1.5 * 5 }}</p> <p>Current time: {{ getCurrentTime() }}</p> ` }) export class AppComponent { getCurrentTime() { return new Date().toLocaleTimeString(); } }
Angular Module
Trong Angular, một module là một container để tổ chức các thành phần liên quan của ứng dụng. Modules giúp tổ chức code, quản lý dependencies, và cải thiện khả năng tái sử dụng. Mỗi ứng dụng Angular có ít nhất một module, được gọi là root module, thường được đặt tên là AppModule.
Modules được định nghĩa bằng cách sử dụng decorator @NgModule. Decorator này nhận một metadata object mô tả cách biên dịch template của component và cách tạo injector khi runtime.
Dưới đây là một ví dụ về cách tạo và sử dụng module trong Angular:
// app.module.ts import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { AppComponent } from './app.component'; @NgModule({ imports: [BrowserModule], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } // app.component.ts import { Component } from '@angular/core'; @Component({ selector: 'app-root', template: ` <h1>Welcome to {{ title }}!</h1> <p>{{ firstName }} {{ lastName }}</p> ` }) export class AppComponent { title = 'My Angular App'; firstName = 'John'; lastName = 'Doe'; }
Angular Directives
Chỉ thị (Directives) trong Angular cho phép bạn mở rộng HTML bằng cách cung cấp cú pháp mới. Mỗi chỉ thị có một tên, có thể là tên được Angular định nghĩa trước hoặc tên tùy chỉnh. Chỉ thị có thể được sử dụng như một thuộc tính, một phần tử, một component hoặc một chọn lọc CSS.
Angular có nhiều chỉ thị tích hợp cung cấp các chức năng khác nhau. Một số chỉ thị phổ biến bao gồm:
- Chỉ thị *ngIf để hiển thị nội dung có điều kiện.
- Chỉ thị *ngFor để lặp qua một danh sách các phần tử.
- Chỉ thị [(ngModel)] được sử dụng để tạo ràng buộc hai chiều giữa view và component.
// app.component.ts import { Component } from '@angular/core'; @Component({ selector: 'app-root', template: ` <h1>Welcome to {{ title }}!</h1> <input [(ngModel)]="name" placeholder="Enter your name"> <p *ngIf="name">Hello, {{ name }}!</p> <ul> <li *ngFor="let item of items">{{ item }}</li> </ul> ` }) export class AppComponent { title = 'My Angular App'; name = ''; items = ['Item 1', 'Item 2', 'Item 3']; }
Data Binding
Trong Angular, Data Binding đề cập đến việc đồng bộ hóa Model và View. Các ứng dụng sử dụng Angular thường có một mô hình dữ liệu, là một tập hợp thông tin mà ứng dụng có thể sử dụng. Liên kết dữ liệu (Data Binding) liên kết các biểu thức Angular với dữ liệu Angular.
Angular cung cấp nhiều cách để thực hiện data binding, cho phép giao tiếp hiệu quả giữa logic của ứng dụng và giao diện người dùng. Hiện tại, Angular hỗ trợ bốn loại Data Binding chính:
Interpolation (Nội suy): Sử dụng dấu ngoặc nhọn kép {{ }} để hiển thị giá trị của một thuộc tính component trong template.
<p>Welcome, {{ username }}!</p>
Property Binding: Sử dụng dấu ngoặc vuông [ ] để ràng buộc một thuộc tính của phần tử DOM với một biểu thức trong component.
<img [src]="userAvatar">
Event Binding: Sử dụng dấu ngoặc tròn ( ) để lắng nghe và phản hồi với các sự kiện của người dùng.
<button (click)="onSubmit()">Submit</button>
Two-way Binding: Kết hợp property binding và event binding, sử dụng cú pháp [( )] (thường được gọi là “banana in a box”).
<input [(ngModel)]="username">
Ví dụ về một component Angular sử dụng các loại data binding:
// user-profile.component.ts import { Component } from '@angular/core'; @Component({ selector: 'app-user-profile', template: ` <h2>{{ title }}</h2> <img [src]="userAvatar" [alt]="username"> <p>Welcome, {{ username }}!</p> <input [(ngModel)]="username" placeholder="Change username"> <button (click)="updateProfile()">Update Profile</button> ` }) export class UserProfileComponent { title = 'User Profile'; username = 'John Doe'; userAvatar = 'path/to/avatar.jpg'; updateProfile() { console.log('Profile updated for:', this.username); } }
Angular Components
Trong Angular hiện đại, Components đã thay thế Controllers. Components là các khối xây dựng cơ bản của ứng dụng Angular, kết hợp template HTML với logic TypeScript.
Ví dụ về một component đơn giản:
// user.component.ts import { Component } from '@angular/core'; @Component({ selector: 'app-user', template: ` <h2>User Information</h2> <p>First Name: <input [(ngModel)]="firstName"></p> <p>Last Name: <input [(ngModel)]="lastName"></p> <p>Full Name: {{ firstName }} {{ lastName }}</p> ` }) export class UserComponent { firstName = 'John'; lastName = 'Doe'; }
Data Management
Angular sử dụng binding trực tiếp giữa component và template, thay vì sử dụng $scope như trong AngularJS.
Routing
Định tuyến (Routing) cho phép ứng dụng của bạn định tuyến các trang khác nhau mà không cần tải lại toàn bộ ứng dụng. Angular cung cấp một hệ thống routing mạnh mẽ thông qua @angular/router:
// app-routing.module.ts import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { HomeComponent } from './home.component'; import { UserComponent } from './user.component'; const routes: Routes = [ { path: 'home', component: HomeComponent }, { path: 'user', component: UserComponent }, { path: '', redirectTo: '/home', pathMatch: 'full' } ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { }
Sử dụng router trong template:
<nav> <a routerLink="/home">Home</a> <a routerLink="/user">User</a> </nav> <router-outlet></router-outlet>
Dependency Injection
Angular có hệ thống Dependency Injection (DI) tích hợp sẵn:
// user.service.ts import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class UserService { getUser() { return { name: 'John Doe', age: 30 }; } } // user.component.ts import { Component } from '@angular/core'; import { UserService } from './user.service'; @Component({ selector: 'app-user', template: `<p>User: {{ user.name }}, Age: {{ user.age }}</p>` }) export class UserComponent { user: { name: string, age: number }; constructor(private userService: UserService) { this.user = this.userService.getUser(); } }
Modules
Angular sử dụng hệ thống module để tổ chức ứng dụng:
// app.module.ts import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { FormsModule } from '@angular/forms'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { UserComponent } from './user.component'; @NgModule({ declarations: [AppComponent, UserComponent], imports: [BrowserModule, FormsModule, AppRoutingModule], bootstrap: [AppComponent] }) export class AppModule { }
Bootstrap Integration
Bootstrap là bộ công cụ mạnh mẽ được sử dụng để tạo và lập trình web cũng như ứng dụng web. Đây là một dự án mã nguồn mở và miễn phí do X tạo ra, được lưu trữ trên GitHub.
Angular có thể tích hợp với Bootstrap thông qua các thư viện như ng-bootstrap hoặc ngx-bootstrap, hoặc bạn có thể sử dụng Bootstrap CSS trực tiếp:
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
Thực hành tạo ứng dụng Angular
Tạo thư mục Hello World Application
Tạo một thư mục cho ứng dụng ở vị trí mong muốn trên hệ thống và mở nó trên trình duyệt mà bạn thường sử dụng (VSCode,…). Sau đó, mở một terminal mới và nhập lệnh sau để tạo thư mục ứng dụng:
ng new hello-world
Khi lệnh được chạy, Angular sẽ tạo một phần khung ứng dụng trong thư mục, bao gồm một loạt các tệp và nhu cầu quan trọng khác cho ứng dụng.
Khởi động ứng dụng
Để chạy ứng dụng, bạn hãy đổi thư mục thành thư mục đã tạo và sử dụng lệnh ng.
cd hello-world ng serve
Sau khi chạy, hãy mở trình duyệt của bạn và điều hướng đến localhost:4200. Nếu một ứng dụng khác đang chạy trên địa chỉ dó, bạn chỉ cần chạy lệnh ng serve-port. Câu lệnh này sẽ tạo ra một cổng để bạn điều hướng đến.
Ngoài ra, bạn có thể để lệnh ng serve chạy trong terminal và tiếp tục thực hiện thay đổi. Nếu bạn mở ứng dụng trong trình duyệt, nó sẽ tự động làm mới mỗi lần bạn lưu thay đổi. Điều này sẽ giúp phát triển nhanh chóng và lặp lại.
Angular App
Bất kỳ ứng dụng Angular đều là ứng dụng dụng một trang (SPA), do đó việc tải của nó được kích hoạt bởi một yêu cầu chính đến máy chủ.
Khi bạn mở bất kỳ URL nào trong trình duyệt, yêu cầu đầu tiên sẽ được gửi đến máy chủ. Yêu cầu ban đầu này được đáp ứng bởi một trang HTML, sau đó tải các tệp JavaScript cần thiết để tải cả Angular cũng như mã ứng dụng và mẫu.
Root HTML – index.html
Cấu trúc của Root Components thường ngắn gọn, hầu như không có bất kỳ tham chiếu hoặc phụ thuộc nào. Thành phần chính duy nhất trong tệp là phần tử <app.root>, đây được xem là điểm đánh dấu để tải ứng dụng. Tất cả mã ứng dụng, kiểu và mẫu nội tuyến đều được đưa vào tệp index.html khi chạy bằng lệnh ng serve.
Cụ thể như sau:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>HelloWorld</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/x-icon" href="favicon.ico"> </head> <body> <app-root></app-root> </body> </html>
The Entry Point – main.ts
Phần quan trọng thứ hai chính là tệp main.ts. Nếu tệp index.html chịu trách nhiệm những tệp nào sẽ được tải thì tệp main.ts sẽ xác định module Angular nào sẽ được tải khi ứng dụng bắt đầu.
Hầu hết mã trong tệp main.ts khá chung chung và bạn hiếm khi phải can thiệp vào hoặc thay đổi tệp này. Mục đích chính của nó là hướng framework Angular đến module cốt lõi của ứng dụng và kích hoạt phần còn lại của mã nguồn ứng dụng từ điểm đó.
import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule } from './app/app.module'; import { environment } from './environments/environment'; if (environment.production) { enableProdMode(); } platformBrowserDynamic().bootstrapModule(AppModule) .catch(err => console.error(err));
Main Module – app.module.ts
Đây là nơi mã nguồn ứng dụng của bạn bắt đầu. Tệp module ứng dụng có thể được coi là cấu hình cốt lõi của ứng dụng, từ việc tải tất cả các phụ thuộc cần thiết và có liên quan, khai báo thành phần nào sẽ được sử dụng trong ứng dụng của bạn, cho đến việc đánh dấu thành phần nào là điểm vào chính (main entry point) của ứng dụng.
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, AppRoutingModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
Root Components – AppComponents
app.components.ts là mã Angular thực tế có công dụng điều khiển chức năng của ứng dụng. Một thành phần Angular không gì khác ngoài TypeScript được trang bị bằng một số thuộc tính và siêu dữ liệu. Lớp này đóng gói tất cả dữ liệu và chức năng của components, trong khi @Component sẽ chỉ định cách nó được dịch sang HTML.
import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { title = 'hello-world'; }
Ngoài ra, bạn có thể xóa tất cả mã và nhập nội dung bạn muốn hiển thị trên trình duyệt, chẳng hạn như chèn logo vào tệp và hiển thị chúng trên trình duyệt bằng một thông báo:
<img [src]= "https://itviec.com/blog/wp-content/uploads/2020/12/blog_logo_retina.png" class="center" [width]="200"[height]="80" display:block> <h1>Hello! Welcome to the Hello-World tutorial</h1>
Câu hỏi thường gặp về lộ trình học Angular
Bắt đầu học Angular như thế nào?
Đầu tiên, để hiểu rõ về Angular bạn sẽ cần làm quen và có góc nhìn cơ bản về các thành phần trong Angular. Bạn nên dành thời gian học học kỹ về các bài học, thành thạo mức độ cơ bản trước khi làm quen với các dự án nâng cao hơn.
Nhìn chung, nếu bạn nắm vững những chủ đề sau sẽ giúp quá trình học Angular sẽ dễ dàng hơn, cụ thể như:
- Có nền tảng kiến thức về HTML, CSS và JavaScript.
- Khái niệm cơ bản về MVC (Model-View-Controllers)
- Mô hình DOM.
- Chức năng và xử lý lỗi trong JavaScript.
Học Angular có khó không?
Angular dành cho người mới bắt đầu được cho là có learning curve độ dốc nhiều hơn khi so sánh với React. Angular Framework dài dòng hơn khi so sánh, hệ thống quản lý thành phần cũng phức tạp và đòi hỏi nhiều hành động lặp đi lặp lại.
Ngoài ra, framework liên tục thay đổi và cập nhật theo xu hướng mới nhất nên các lập trình viên phải liên tục cập nhật kỹ năng của mình. Sử dụng TypeScript và RxJS trong các phiên bản Angular 2+ cũng là một vấn đề nan giải, mặc dù TypeScript tương tự như JavaScript nhưng việc học nó sẽ cần khoảng thời gian lâu hơn.
Tuy nhiên, nếu bạn có lộ trình học thích hợp và nắm vững kiến thức từ cơ bản đến nâng cao thì sẽ không quá khó để học Angular.
Có nên học Angular vào năm 2024 không?
Angular là một trong những ngôn ngữ lập trình phổ biến và có tính ứng dụng cao. Angular là một framework toàn diện đảm bảo đồng bộ hoá dữ liệu trong tất cả thiết bị, từ ứng dụng đến máy chủ. Do đó, nếu bạn đang có định hướng phát triển front-end developers thì học Angular sẽ là nền tảng kiến thức cần thiết và quan trọng.
Angular được dùng để làm gì?
Nhìn chung, Angular cho người mới bắt đầu sẽ được sử dụng cho các thành phần web tương tác, bởi sự hiệu quả, tính đơn giản và khả năng thích ứng cao. Rxjs và AngularCLI là hai tính năng tích hợp của Angular có khả năng tạo kênh để trao đổi và xử lý dữ liệu. Tạo ứng dụng, thêm tệp hoặc gỡ lỗi dự án đều dễ dàng khi sử dụng Angular.
Khi chạy các thành phần song song, Angular cũng giúp tối đa hóa hiệu quả và giảm số dòng mã. Do đó, Angular cải thiện hiệu suất tổng thể. Ngoài ra, nó còn cung cấp khả năng kết xuất nhanh ở phía máy chủ, hỗ trợ chế độ xem mà không cần kết xuất ở phía trình duyệt.
Tổng kết Lộ trình học Angular
Bài viết đã hướng dẫn về lộ trình học Angular bao gồm các khía cạnh cơ bản, nhiều bản demo để tạo biểu mẫu cũng như thành phần của Angular. Để nâng cao nền tảng kiến thức của bản thân, bạn có thể áp dụng lý thuyết vào các dự án thực tế, từ đó cơ hội nghề nghiệp cũng phát triển và đạt được những thành tựu cho bản thân.
Đừng quên theo dõi ITviec Blog để được cập nhật nhanh nhất những thông tin cùng xu hướng việc làm của lĩnh vực Công nghệ thông tin bạn nhé!