Chỉ thị AngularJS: ng-init, ng-app, ng-model & ng-repeat

⚡ Tóm tắt thông minh

Các chỉ thị AngularJS mở rộng HTML thông thường với các hành vi mới. Các dấu hiệu ng-app, ng-init, ng-model và ng-repeat khởi tạo ứng dụng, điền dữ liệu cục bộ, liên kết các điều khiển biểu mẫu với mô hình và sao chép các phần tử một lần cho mỗi mục trong tập hợp.

  • 🧩 Ý tưởng cốt lõi: Chỉ thị là một dấu hiệu trên phần tử HTML cho biết trình biên dịch AngularJS cần gán hành vi cho phần tử đó.
  • 🚀 Bootstrap Point: ng-app khai báo phần tử gốc và tự động khởi chạy AngularJS ngay khi trang được tải.
  • 🧮 Dữ liệu cục bộ: ng-init gán giá trị khởi tạo cho các biến phạm vi bên trong mã HTML mà không cần đến controller.
  • 🔄 Cấu trúc đóng gáy hai chiều: ng-model liên kết một input, select hoặc textarea với một thuộc tính scope, do đó các chỉnh sửa sẽ cập nhật model ngay lập tức.
  • 📋 Đánh dấu lặp lại: ng-repeat sao chép phần tử chứa nó một lần cho mỗi mục trong mảng hoặc đối tượng.
  • 🎛️ Bốn hình thức cầu khẩn: Thuộc tính restrict chấp nhận các ký tự E, A, C và M cho cú pháp phần tử, thuộc tính, lớp và chú thích.
  • 📚 Thư viện rộng hơn: AngularJS gửi hàng tá lệnh tích hợp, trong số đó có ng-bind, ng-if, ng-show, ng-class và ng-click.

Chỉ thị AngularJS

Chỉ thị trong AngularJS là gì?

A Chỉ thị Trong AngularJS, `<directive>` là một lệnh cung cấp chức năng mới cho HTML. Khi AngularJS xử lý mã HTML, nó sẽ tìm các directive trong trang trước tiên và sau đó phân tích cú pháp trang HTML tương ứng. Một ví dụ đơn giản về directive trong AngularJS, mà chúng ta đã thấy trong các chương trước, là directive `ng-model`. Directive này được sử dụng để liên kết mô hình dữ liệu của chúng ta với view.

Lưu ý: Bạn có thể sử dụng mã AngularJS cơ bản trong trang HTML với các chỉ thị ng-init, ng-repeat và ng-model mà không cần đến Controller. Logic cho các chỉ thị này nằm trong tệp AngularJS được cung cấp bởi GoogleController là cấu trúc lập trình cấp cao hơn trong AngularJS cho phép xử lý logic nghiệp vụ, nhưng như đã đề cập, để một ứng dụng được coi là ứng dụng AngularJS thì không bắt buộc phải có controller.

Nhưng làm thế nào mà một trình duyệt lại chạy được chương trình đó?

Cách thức hoạt động của các chỉ thị AngularJS trong HTML

Như đã định nghĩa trong phần giới thiệu, chỉ thị AngularJS là một cách để mở rộng chức năng của... HTMLKhi trang tải xong, trình biên dịch AngularJS sẽ duyệt qua DOM, so khớp từng phần tử với các chỉ thị đã đăng ký và gắn hành vi mà nó tìm thấy.

AngularJS Nó đi kèm với hàng tá chỉ thị được tích hợp sẵn, cộng thêm bất kỳ chỉ thị nào bạn tự đăng ký. Bốn chỉ thị được giải thích bên dưới với các ví dụ minh họa, ng-app, ng-init, ng-model và ng-repeat, là những chỉ thị mà người mới bắt đầu thường gặp. Trước các ví dụ đó, hãy lưu ý bốn cách để viết một chỉ thị.

Bốn loại chỉ thị (directive) trong AngularJS là gì?

Một chỉ thị không phải lúc nào cũng là một thuộc tính. Trình biên dịch AngularJS có thể khớp một chỉ thị dựa trên tên phần tử, thuộc tính, tên lớp hoặc chú thích, và mỗi chỉ thị khai báo các dạng mà nó chấp nhận thông qua thuộc tính của nó. restrict thuộc tính. Giá trị mặc định là EAVì vậy, cả cú pháp phần tử và thuộc tính đều hoạt động trừ khi bạn chỉ định khác. Giá trị quan trọng nhất khi bạn viết chỉ thị của riêng mình, bởi vì trình biên dịch sẽ bỏ qua bất kỳ dạng nào mà giá trị hạn chế loại trừ.

giới hạn giá trị Phù hợp bởi Ví dụ về mã đánh dấu Sử dụng điển hình
E Tên phần tử Các khối độc lập sở hữu một mẫu.
A đặc tính Thêm hành vi vào một phần tử hiện có
C Tên lớp Mã đánh dấu cũ không thể thêm thuộc tính mới.
M Bình luận Hiếm, được giữ lại để tương thích ngược.

💡 Mẹo: Ưu tiên cú pháp phần tử và thuộc tính. Tài liệu tham khảo chính thức về chỉ thị AngularJS Coi các dạng lớp và bình luận là các tùy chọn cũ. Tất cả các ví dụ bên dưới đều sử dụng cú pháp thuộc tính.

ng-app trong AngularJS

Chỉ thị này được sử dụng để khởi tạo một ứng dụng AngularJS. Khi chỉ thị này được đặt trong một trang HTML, về cơ bản nó cho AngularJS biết rằng trang HTML này là một ứng dụng AngularJS.

Ví dụ về ng-app

Ví dụ dưới đây minh họa cách biến một ứng dụng HTML thông thường thành một ứng dụng AngularJS.

ng-app trong AngularJS

<!DOCTYPE html>
<html>
<head>
    <meta chrset="UTF 8">
    <title>Event Registration</title>
</head>
<body>

<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<h1> Guru99 Global Event</h1>

<div ng-app="">

    Tutorial Name : {{ "Angular" + "JS"}}

</div>

</body>
</html>

⚠️ Cảnh báo: Danh sách này giữ nguyên nội dung ban đầu. chrset="UTF 8", chính xác như đã công bố. Thuộc tính chính xác là charset="UTF-8".

Code Giải thích:

  1. Chỉ thị “ng-app” được thêm vào thẻ div của chúng ta để chỉ ra rằng ứng dụng này là ứng dụng AngularJS. Lưu ý rằng chỉ thị ng-app có thể được áp dụng cho bất kỳ thẻ nào, vì vậy nó cũng có thể được đặt trong thẻ body.
  2. Vì chúng ta đã định nghĩa ứng dụng này là một ứng dụng AngularJS, nên giờ đây chúng ta có thể sử dụng các chức năng của AngularJS. Trong trường hợp này, chúng ta đang sử dụng các biểu thức để đơn giản là nối hai chuỗi lại với nhau.

Nếu đoạn mã được thực thi thành công, kết quả bên dưới sẽ hiển thị.

Đầu ra:

ng-app trong AngularJS

Kết quả hiển thị rõ ràng cho thấy kết quả của biểu thức, điều này chỉ có thể thực hiện được vì chúng ta đã định nghĩa ứng dụng là ứng dụng AngularJS. Chỉ thị tiếp theo cung cấp dữ liệu của nó.

ng-init trong AngularJS

Lệnh này được sử dụng để khởi tạo dữ liệu ứng dụng. Đôi khi bạn có thể cần một số dữ liệu cục bộ cho ứng dụng của mình, và điều này có thể được thực hiện bằng chỉ thị `ng-init`.

Ví dụ về ng-init

Trong ví dụ này, chúng ta sẽ tạo một biến có tên “TutorialName” bằng cách sử dụng lệnh ng-init và hiển thị giá trị của biến đó trên trang.

ng-init trong AngularJS

<!DOCTYPE html>
<html>
<head>
    <meta chrset="UTF 8">
    <title>Event Registration</title>
</head>
<body>

<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<h1> Guru99 Global Event</h1>

<div ng-app="" ng-init="TutorialName='Angular JS'">

    Tutorial Name : {{ TutorialName}}

</div>

</body>
</html>

Code Giải thích:

  1. Lệnh ng-init được thêm vào thẻ div của chúng tôi để xác định một biến cục bộ có tên là “TutorialName” và giá trị được cung cấp cho biến này là “AngularJS”.
  2. Chúng tôi đang sử dụng biểu thức trong AngularJS để hiển thị kết quả của tên biến “TutorialName”, được định nghĩa trong chỉ thị ng-init của chúng tôi.

Nếu đoạn mã được thực thi thành công, kết quả bên dưới sẽ hiển thị.

Đầu ra:

ng-init trong AngularJS

Ở đầu ra,

  • Kết quả hiển thị rõ ràng đầu ra của biểu thức chứa chuỗi “AngularJS”. Điều này là do chuỗi “AngularJS” được gán cho biến 'TutorialName' trong phần ng-init.

Lệnh tiếp theo sẽ gửi dữ liệu từ màn hình trở lại mô hình.

mô hình ng trong AngularJS

Và cuối cùng, chúng ta có chỉ thị ng-model, được sử dụng để liên kết giá trị của một điều khiển HTML với dữ liệu ứng dụng.

Ví dụ về ng-model

Trong ví dụ này,

  • Chúng ta sẽ tạo 2 biến gọi là “số lượng” và “giá”. Các biến này sẽ được liên kết với 2 điều khiển nhập văn bản.
  • Sau đó, chúng tôi sẽ hiển thị tổng số tiền dựa trên phép nhân của cả giá trị giá và số lượng.

mô hình ng trong AngularJS

<!DOCTYPE html>
<html>
<head>
    <meta chrset="UTF 8">
    <title>Event Registration</title>
</head>
<body>

<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<h1> Guru99 Global Event</h1>

<div ng-app="" ng-init="quantity=1;price=5">

    People : <input type="number" ng-model="quantity">

    Registration Price : <input type="number" ng-model="price">

    Total : {{quantity * price}}

</div>

</body>
</html>

Code Giải thích:

  1. Lệnh ng-init được thêm vào thẻ div của chúng tôi để xác định 2 biến cục bộ; một cái được gọi là “số lượng” và cái còn lại là “giá cả”.
  2. Bây giờ chúng ta sử dụng chỉ thị ng-model để liên kết các hộp văn bản “People” và “Registration price” với các biến cục bộ “quantity” và “price” tương ứng.
  3. Cuối cùng, chúng ta thể hiện Tổng thông qua một biểu thức, là phép nhân của biến số lượng và biến giá.

Nếu đoạn mã được thực thi thành công, kết quả bên dưới sẽ hiển thị.

Đầu ra:

mô hình ng trong AngularJS

  • Đầu ra hiển thị rõ ràng phép nhân của các giá trị dành cho Người và Giá đăng ký.

Bây giờ, nếu bạn thay đổi giá trị của Số người và Giá đăng ký trong các ô văn bản, Tổng cộng sẽ tự động thay đổi.

mô hình ng trong AngularJS

  • Kết quả đầu ra ở trên chỉ đơn giản cho thấy sức mạnh của liên kết dữ liệu trong AngularJS, điều này đạt được nhờ việc sử dụng... chỉ thị ng-model.

Phương pháp cuối cùng trong bốn phương pháp này xử lý nhiều giá trị cùng một lúc.

lặp lại trong AngularJS

Điều này được sử dụng để lặp lại một phần tử HTML. Ví dụ dưới đây cho thấy cách sử dụng chỉ thị ng-repeat.

Ví dụ về ng-repeat

Trong ví dụ này,

  • Chúng ta sẽ có một mảng tên chương trong một biến mảng và
  • sau đó sử dụng lệnh ng-repeat để hiển thị từng phần tử của mảng dưới dạng một mục danh sách

lặp lại trong AngularJS

<!DOCTYPE html>
<html>
<head>
    <meta chrset="UTF 8">
    <title>Event Registration</title>
</head>
<body>

<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<h1> Guru99 Global Event</h1>

<div ng-app="" ng-init="chapters=['Controllers','Models','Filters']">
    <ul>
        <li ng-repeat="names in chapters">
            {{names}}
        </li>
    </ul>

</div>

</body>
</html>

Code Giải thích:

  1. Lệnh ng-init được thêm vào thẻ div của chúng ta để xác định một biến có tên là “chương”, là một biến mảng chứa 3 chuỗi.
  2. Phần tử ng-repeat được sử dụng bằng cách khai báo một biến nội tuyến có tên là “names” và duyệt qua từng phần tử trong mảng chương.
  3. Cuối cùng, chúng tôi hiển thị giá trị của biến nội tuyến cục bộ 'names'.

Nếu đoạn mã được thực thi thành công, kết quả bên dưới sẽ hiển thị.

Đầu ra:

lặp lại trong AngularJS

  • Kết quả đầu ra ở trên chỉ cho thấy lệnh ng-repeat lấy từng giá trị trong mảng được gọi là “chương” và tạo các mục danh sách HTML cho từng mục trong mảng.

Bốn bước đó bao gồm khởi động, dữ liệu, liên kết và lặp lại. Danh sách bên dưới cho thấy những bước tiếp theo.

Các chỉ thị tích hợp sẵn khác thường được sử dụng trong AngularJS

Bốn chỉ thị trên là tập hợp ban đầu, chứ không phải toàn bộ thư viện. Mỗi mục bên dưới là một thuộc tính mà bạn đặt trực tiếp lên phần tử mà nó điều khiển.

  • ng-bind: Ghi giá trị phạm vi vào văn bản của một phần tử mà không hiển thị dấu ngoặc nhọn thô trong giây lát khi tải trang.
  • ng-if: Xóa phần tử khỏi DOM khi biểu thức của nó là false, và xây dựng lại phần tử đó khi biểu thức là true.
  • ng-show và ng-hide: TogglHiển thị bằng CSS. Phần tử vẫn nằm trong DOM, do đó việc bật/tắt nhiều lần sẽ tốn ít tài nguyên hơn.
  • ng-class: Thêm hoặc xóa các lớp CSS khỏi một biểu thức, cho phép kiểu dáng tuân theo mô hình.
  • ng-click: Thực thi một biểu thức hoặc một hàm phạm vi khi người dùng nhấp vào phần tử.
  • ng-controller: Gắn bộ điều khiển vào một khối mã HTML khi trang web vượt quá khả năng của ng-init.
  • ng-disabled và ng-readonly: Đặt thuộc tính biểu mẫu phù hợp bất cứ khi nào biểu thức của chúng đúng.

Phần Hỏi đáp bên dưới sẽ giải đáp những câu hỏi thường gặp nhất sau danh sách này.

Câu Hỏi Thường Gặp

AngularJS chuẩn hóa tên thuộc tính trước khi so khớp. Nó loại bỏ bất kỳ tiền tố x- hoặc data- nào, sau đó chuyển đổi các dấu gạch ngang, dấu hai chấm hoặc dấu gạch dưới thành kiểu chữ viết hoa xen kẽ (camel case). Đó là lý do tại sao data-ng-app, x-ng-app và ng:app đều được giải quyết thành cùng một chỉ thị ngApp.

Cả hai đều in ra một giá trị phạm vi. Biểu thức nội suy có thể hiển thị dấu ngoặc nhọn thô của nó trong giây lát trước khi AngularJS hoàn tất quá trình tải, trong khi ng-bind để trống phần tử cho đến khi quá trình biên dịch hoàn tất. Nên ưu tiên ng-bind cho văn bản xuất hiện ở phần trên màn hình.

Không. Việc hỗ trợ chính thức cho AngularJS đã kết thúc vào tháng 1 năm 2022, vì vậy sẽ không có bản vá nào được phát hành thêm. Các trang hiện có vẫn hoạt động, nhưng các dự án mới nên bắt đầu với Angular hiện đại, nơi các chỉ thị này trở thành các thành phần và các chỉ thị cấu trúc như *ngIf và *ngFor.

Một phần. Các trợ lý như... Trợ lý GitHub Viết lại ng-repeat thành *ngFor và ng-if thành *ngIf một cách đáng tin cậy. Việc kế thừa phạm vi, liên kết hai chiều và các hàm liên kết tùy chỉnh vẫn cần được con người xem xét trước khi mã được chuyển đổi và đưa vào sử dụng.

Dán mã đánh dấu, khai báo mô-đun và kết quả đầu ra của bảng điều khiển vào ChatGPT và hỏi chỉ thị nào không khớp. Thông thường, nó sẽ phát hiện ra thiếu ng-app, thuộc tính bị viết sai chính tả hoặc giá trị restrict chặn cú pháp bạn đã chọn.

Tóm tắt bài viết này với: