Biểu thức AngularJS: Mảng, Đối tượng, $eval, Chuỗi

⚡ Tóm tắt thông minh

Biểu thức AngularJS là các đoạn mã được đặt bên trong dấu ngoặc kép, liên kết dữ liệu trực tiếp vào mẫu. Chúng đánh giá các số, chuỗi, đối tượng và mảng, và hàm `$eval` thực hiện việc đánh giá tương tự từ bên trong bộ điều khiển.

  • 🧩 Cú pháp liên kết: Double Dấu ngoặc nhọn trả về một giá trị tại vị trí biểu thức, cho kết quả tương tự như chỉ thị ng-bind.
  • 🔢 Các loại được hỗ trợ: Numbers, dây đàn, JavaCác đối tượng kịch bản được truy cập bằng cú pháp dấu chấm và các mảng được truy cập bằng chỉ mục đều được đánh giá chính xác.
  • 🏷️ Biến nội tuyến: Chỉ thị ng-init khai báo các biến ở cấp độ hiển thị mà các biểu thức có thể đọc mà không cần bộ điều khiển.
  • 🛡️ Đánh giá khoan dung: Các thuộc tính không được định nghĩa sẽ trả về giá trị không xác định thay vì ném ra lỗi ReferenceError thông thường. JavaKịch bản sẽ làm tăng giá.
  • 🚫 Giới hạn cứng: Các vòng lặp, ngoại lệ, khai báo hàm, biểu thức chính quy, cũng như toán tử dấu phẩy và toán tử void đều không khả dụng.
  • ⚙️ Đánh giá bộ điều khiển: `$scope.$eval` đánh giá một chuỗi biểu thức trong mã điều khiển và hiển thị kết quả cho giao diện người dùng.
  • ⚠️ Trạng thái hỗ trợ: AngularJS đã hết hạn hỗ trợ vào ngày 31 tháng 12 năm 2021 và sẽ không nhận được bất kỳ bản vá bảo mật nào nữa.

Biểu thức AngularJS

Biểu thức AngularJS là gì?

Biểu thức là các biến được viết bên trong dấu ngoặc kép. {{ }}Chúng được sử dụng rất phổ biến trong AngularJS và xuất hiện xuyên suốt các bài hướng dẫn trước đó trong loạt bài này.

⚠️ Thông báo hỗ trợ: AngularJS đã đạt đến Hết hạn sử dụng vào ngày 31 tháng 12 năm 2021. và không nhận được thêm bản vá lỗi hoặc bản sửa lỗi bảo mật nào nữa. Cú pháp bên dưới vẫn chính xác để duy trì các ứng dụng AngularJS 1.x hiện có; các dự án mới nên sử dụng cú pháp hiện đại. có góc cạnh, nơi mà dấu ngoặc nội suy vẫn tồn tại nhưng ng-init$eval đừng.

Giải thích biểu thức AngularJS bằng một ví dụ.

Các biểu thức trong AngularJS được viết bên trong dấu ngoặc kép, như trong ví dụ sau: {{expression}}.

Cú pháp: Một ví dụ đơn giản về biểu thức là {{5 + 6}}.

Biểu thức trong AngularJS liên kết dữ liệu với HTML theo cùng một cách như chỉ thị ng-bind, và AngularJS hiển thị dữ liệu chính xác tại vị trí biểu thức được đặt.

Trong ví dụ này, chúng ta sẽ trình bày phép cộng đơn giản các số dưới dạng một biểu thức.

Biểu thức AngularJS

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

    <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

    <h1>Guru99 Global Event</h1>

    <div ng-app="">
        Addition : {{6+9}}
    </div>

</body>
</html>

Code Giải thích:

  1. Chỉ thị ng-app trống, điều này có nghĩa là không có mô-đun nào cung cấp bộ điều khiển. chỉ thịhoặc các dịch vụ liên quan đến trang này.
  2. Một phép cộng đơn giản cho hai số.

Đầu ra:

Biểu thức AngularJS

Phép cộng 9 và 6 được thực hiện và kết quả là 15.

AngularJS Numbers

Biểu thức hoạt động với các số. Ví dụ này nhân hai biến số, marginprofitvà hiển thị sản phẩm.

AngularJS Numbers

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

    <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

    <h1>Guru99 Global Event</h1>

    <div ng-app="" ng-init="margin=2;profit=200">
        Total profit margin

        {{margin*profit}}
    </div>

</body>
</html>

Code Giải thích:

  1. Chỉ thị `ng-init` định nghĩa các biến và giá trị của chúng trong chính view, tương tự như các biến cục bộ trong bất kỳ ứng dụng nào khác. ngôn ngữ lập trình. Đây marginprofit được khai báo và gán.
  2. Biểu thức đó sau đó nhân hai biến cục bộ đó với nhau.

Đầu ra:

AngularJS Numbers

Phép nhân giữa 2 và 200 được thực hiện và kết quả là 400.

Chuỗi AngularJS

Biểu thức cũng hoạt động với chuỗi ký tự. Ví dụ này định nghĩa... firstNamelastName và hiển thị cả hai.

Chuỗi AngularJS

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

    <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

    <h1>Guru99 Global Event</h1>

    <div ng-app="" ng-init="firstName='Guru';lastName='99'">
        First Name : {{firstName}}<br>
        Last Name : {{lastName}}
    </div>

</body>
</html>

Code Giải thích:

  1. Chỉ thị ng-init định nghĩa firstName với giá trị “Guru"Và lastName với giá trị “99”.
  2. Các biểu thức {{firstName}}{{lastName}} Đọc các biến đó và hiển thị chúng trong giao diện.

Đầu ra:

Chuỗi AngularJS

Cả hai giá trị đều hiển thị trên màn hình.

Đối tượng AngularJS

Biểu thức hoạt động với JavaScript các đối tượng, bao gồm các cặp tên-giá trị. Cú pháp của một JavaĐối tượng kịch bản trông như thế này:

var car = {type: "Ford", model: "Explorer", color: "White"};

Ví dụ này định nghĩa một person Đối tượng chứa hai cặp khóa-giá trị. firstNamelastName.

Đối tượng AngularJS

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

<script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

<h1>Guru99 Global Event</h1>

<div ng-app="" ng-init="person={firstName:'Guru',lastName:'99'}">
    First Name : {{person.firstName}}<br>
    Last Name : {{person.lastName}}
</div>

</body>
</html>

Code Giải thích:

  1. Chỉ thị ng-init định nghĩa đối tượng person với các cặp khóa-giá trị firstName đặt thành “Guru"Và lastName đặt thành “99”.
  2. Các biểu thức {{person.firstName}}{{person.lastName}} Đọc các thành viên đó. Vì chúng thuộc về đối tượng, nên cần sử dụng ký hiệu dấu chấm để truy cập giá trị của chúng.

Đầu ra:

Đối tượng AngularJS

Các giá trị của firstNamelastName xuất hiện trên màn hình.

Mảng AngularJS

Biểu thức hoạt động với mảng. Ví dụ này định nghĩa một mảng chứa điểm số của học sinh trong ba môn học và hiển thị từng giá trị.

Mảng AngularJS

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

<script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

<h1>Guru99 Global Event</h1>

<div ng-app="" ng-init="marks=[1,15,19]">
    Student Marks<br>
    Subject1 : {{marks[0]}}<br>
    Subject2 : {{marks[1]}}<br>
    Subject3 : {{marks[2]}}
</div>

</body>
</html>

Code Giải thích:

  1. Chỉ thị ng-init định nghĩa mảng marks với ba giá trị 1, 15 và 19.
  2. Các biểu hiện của hình thức marks[index] Đọc từng phần tử.

Đầu ra:

Mảng AngularJS

Các dấu hiệu được định nghĩa trong mảng sẽ được hiển thị.

Các khả năng và hạn chế của biểu thức AngularJS

DỊCH VỤ

  1. Các biểu thức AngularJS tương tự như vậy. JavaCác biểu thức kịch bản có chung nhiều sức mạnh và tính linh hoạt.
  2. Ở đâu JavaĐoạn mã sẽ báo lỗi ReferenceError hoặc TypeError nếu thuộc tính không được định nghĩa, trong khi quá trình đánh giá của AngularJS khá dễ dãi và trả về giá trị undefined hoặc null.
  3. Bạn có thể áp dụng các bộ lọc bên trong một biểu thức để định dạng dữ liệu trước khi hiển thị.
  4. Toán tử ba ngôi được hỗ trợ, vì vậy {{ isReady ? 'Yes' : 'No' }} là hợp lệ.

Hạn chế

  1. Không thể sử dụng vòng lặp và xử lý ngoại lệ bên trong biểu thức AngularJS. Logic điều kiện chỉ giới hạn ở toán tử ba ngôi; if Hiện chưa có thông tin về báo cáo.
  2. Không thể khai báo hàm trong một biểu thức, ngay cả bên trong chỉ thị ng-init.
  3. Biểu thức chính quy không thể được tạo bên trong một biểu thức khác. Biểu thức chính quy là sự kết hợp của các ký hiệu và ký tự được sử dụng để khớp với các chuỗi, chẳng hạn như: .*\.txt$và những cách hiểu theo nghĩa đen như vậy bị bác bỏ.
  4. Toán tử dấu phẩy (,) Và void Người điều hành không được phép.

ng-bind so với dấu ngoặc nhọn biểu thức: Nên sử dụng cái nào?

Double Cả dấu ngoặc nhọn và chỉ thị ng-bind đều tạo ra cùng một kết quả hiển thị, vì vậy việc lựa chọn giữa chúng có vẻ tùy ý. Nhưng thực tế không phải vậy. Hai cái này hoạt động khác nhau trong thời điểm trước khi AngularJS tải xong, và sự khác biệt đó có thể nhận thấy được đối với người dùng trang web.

Yếu tố {{ expression }} ng-bind
Viết vào Nội dung phần tử Thuộc tính phần tử
Trước khi AngularJS được tải Niềng răng thô hiện lên màn hình Không có gì được hiển thị
Dễ đọc Cao hơn — giá trị nằm trong phạm vi hợp lý Thấp hơn — giá trị được ẩn trong một thuộc tính
Nhiều giá trị cho mỗi phần tử Không, chỉ có một mối ràng buộc duy nhất.
Liên kết một lần Vâng, với {{::value}} Vâng, với ng-bind="::value"

Sự xuất hiện thoáng qua của dấu ngoặc nhọn thô được gọi là hiện tượng "nhấp nháy nội dung chưa được nội suy", và điều này xảy ra vì trình duyệt hiển thị mã đánh dấu trước khi AngularJS biên dịch nó. Hãy sử dụng ng-bind hoặc thêm chỉ thị ng-cloak cho nội dung hiển thị ở phần trên màn hình. Dấu ngoặc nhọn vẫn là lựa chọn rõ ràng và dễ đọc hơn ở mọi nơi khác, đặc biệt là khi có nhiều giá trị xuất hiện bên trong một phần tử.

Sự khác biệt giữa biểu thức và $eval

$eval Hàm này đánh giá các biểu thức từ bên trong bộ điều khiển. Các biểu thức được đánh giá trong giao diện người dùng, trong khi đó $eval được đánh giá trong mã điều khiển.

Ví dụ này sử dụng $eval Cộng hai số và đặt kết quả vào đối tượng phạm vi để khung nhìn có thể hiển thị.

Sự khác biệt giữa biểu thức và $eval

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

<script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

<div ng-app="sampleApp" ng-controller="AngularController">
    <h1>Guru99 Global Event</h1>
    {{value}}
</div>

<script>
    var sampleApp = angular.module('sampleApp', []);
    sampleApp.controller('AngularController', function($scope) {
        $scope.a = 1;
        $scope.b = 1;

        $scope.value = $scope.$eval('a+b');
    });
</script>

</body>
</html>

Code Giải thích:

  1. Hai biến phạm vi, abMỗi phần tử đều có giá trị là 1.
  2. $scope.$eval Đánh giá phép cộng của chúng và gán kết quả cho biến phạm vi. value.
  3. Sau đó, khung nhìn sẽ hiển thị value.

Đầu ra:

Sự khác biệt giữa biểu thức và $eval

Kết quả hiển thị biểu thức được đánh giá bên trong điều khiển, với tổng của hai biến phạm vi được gửi đến và hiển thị trong khung nhìn.

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

Đặt hai dấu hai chấm ở đầu một biểu thức, như trong {{::name}}Việc này sẽ ngừng theo dõi khi giá trị được giải quyết. Nó loại bỏ trình theo dõi và giảm chi phí xử lý tóm tắt trên các trang có nhiều liên kết tĩnh.

$eval đánh giá chuỗi ngay lập tức so với một phạm vi. $parse Trả về một hàm có thể tái sử dụng để đánh giá nhiều lần. $interpolate Xử lý toàn bộ chuỗi mẫu chứa dấu ngoặc nhọn thay vì chỉ một biểu thức đơn lẻ.

Hầu hết. AI Các công cụ giữ nguyên dấu ngoặc nhọn và viết lại các bộ lọc dưới dạng pipe, nhưng các biến ng-init không có tương đương trong Angular và phải được chuyển vào một lớp thành phần bằng tay.

Các công cụ AI quét các mẫu để tìm các lệnh gọi hàm bên trong các liên kết, các lệnh này được chạy lại trong mỗi chu kỳ xử lý tóm tắt, và đề xuất lưu trữ kết quả vào phạm vi hoặc chuyển sang liên kết một lần.

Quá trình đánh giá trong AngularJS được thiết kế khá dễ dãi. Một thuộc tính bị thiếu sẽ trả về giá trị `undefined`, được hiển thị dưới dạng chuỗi rỗng, vì vậy giá trị trống thường có nghĩa là lỗi chính tả trong đường dẫn thuộc tính chứ không phải là lỗi thời gian chạy.

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