AngularJS ng-view với ví dụ
⚡ Tóm tắt thông minh
Trong AngularJS, Views cho phép một trang thay đổi nội dung thay vì chuyển hướng đến trang khác, điều này làm cho ứng dụng một trang (SPA) có cảm giác mượt mà tức thì. Chỉ thị `ng-view` đánh dấu vùng mà mỗi route thay thế bằng template và controller riêng của nó.

Các trang web nổi tiếng như Gmail Sử dụng khái niệm Ứng dụng Trang Đơn (Single Page Applications). Khi người dùng yêu cầu một trang khác, ứng dụng không chuyển hướng mà hiển thị giao diện của trang mới bên trong trang hiện có, do đó người dùng có cảm giác như chưa từng rời khỏi trang. Điều tương tự cũng được thực hiện trong AngularJS bằng cách sử dụng các view kết hợp với các route.
⚠️ 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. Chỉ thị bên dưới vẫn chính xác để duy trì các ứng dụng AngularJS 1.x hiện có; trong phiên bản hiện đại có góc cạnh tương đương với <router-outlet>.
Chế độ xem là gì?
Giao diện (View) là nội dung được hiển thị cho người dùng. Bất cứ điều gì người dùng muốn xem, giao diện tương ứng của ứng dụng sẽ được hiển thị.
Việc kết hợp các khung nhìn và tuyến đường chia ứng dụng thành các khung nhìn logic và liên kết mỗi khung nhìn với một... điều khiểnĐiều này giúp cho việc quản lý ứng dụng trở nên dễ dàng hơn.
Giả sử có một ứng dụng đặt hàng cho phép khách hàng xem các đơn hàng và đặt đơn hàng mới. Sơ đồ bên dưới minh họa cách ứng dụng đó được chuyển đổi thành ứng dụng một trang duy nhất.
Thay vì hai trang web riêng biệt, một trang để "Xem đơn hàng" và một trang để "Đặt đơn hàng mới", AngularJS Sử dụng hai chế độ xem trên cùng một trang, được truy cập thông qua hai liên kết tham chiếu. #show và #new:
- Điều hướng đến
MyApp/#showHiển thị trang Xem đơn hàng mà không cần rời khỏi trang. Chỉ phần đó của trang hiện tại được làm mới. - Điều hướng đến
MyApp/#newĐiều này cũng áp dụng tương tự cho trang Đơn hàng mới.
Việc chia ứng dụng thành các phần hiển thị (view) như vậy giúp dễ quản lý và dễ thay đổi, và mỗi phần hiển thị đều có một bộ điều khiển tương ứng chứa logic nghiệp vụ cho chức năng đó.
ng-view Chỉ thị trong AngularJS
ngView Chỉ thị bổ sung cho $route dịch vụ bằng cách đưa mẫu đã được hiển thị của tuyến đường hiện tại vào tệp bố cục chính, thông thường index.html.
Mỗi khi tuyến đường hiện tại thay đổi, chế độ xem được hiển thị cũng thay đổi theo. $route cấu hình, mà không cần tải lại trang. tuyến đường được đề cập riêng biệt; trọng tâm ở đây là thêm nhiều góc nhìn khác nhau.
Sơ đồ dưới đây thể hiện toàn bộ quy trình, sau đó ví dụ sẽ hướng dẫn từng bước một.
Cách triển khai ng-view trong AngularJS
Ví dụ này đưa ra hai tùy chọn cho người dùng: hiển thị sự kiện và thêm sự kiện. Nhấp chuột Thêm một sự kiện Hình ảnh này hiển thị giao diện Thêm sự kiện, và điều tương tự cũng áp dụng cho Hiển thị sự kiện.
Bước 1) Thêm tệp angular-route làm tham chiếu script. Tệp này cần thiết để sử dụng nhiều tuyến đường và chế độ xem, và có sẵn trên trang web AngularJS.
Bước 2) Thêm thẻ href và thẻ div.
- Thêm thẻ href liên kết đến “Thêm sự kiện mới” và “Hiển thị sự kiện”.
- Thêm một thẻ div chứa nội dung sau:
ng-viewChỉ thị này dùng để đánh dấu vùng hiển thị. Vùng hiển thị tương ứng sẽ được chèn vào đó mỗi khi một trong hai liên kết được nhấp.
Bước 3) Trong thẻ script của AngularJS, hãy thêm cấu hình định tuyến.
- Khi người dùng nhấp vào Sự kiện mới liên kết, AngularJS tải
add_event.html, chèn mã đánh dấu của nó vào khung nhìn và sử dụngAddEventControllerVề mặt logic nghiệp vụ. - Khi người dùng nhấp vào Sự kiện hiển thị liên kết, nó tải
show_event.htmlvà sử dụngShowDisplayController. -
otherwiseMệnh đề này thiết lập chế độ xem mặc định hiển thị cho người dùng, ở đây là DisplayEvent.
Bước 4) Thêm các bộ điều khiển để xử lý logic nghiệp vụ cho cả hai hàm. Mỗi bộ điều khiển chỉ đơn giản là thiết lập một thông báo trên đối tượng phạm vi của nó, được hiển thị khi chế độ xem tương ứng được hiển thị.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <script src="https://code.angularjs.org/1.8.3/angular-route.js"></script> </head> <body ng-app="sampleApp"> <h1>Guru99 Global Event</h1> <div class="container"> <ul> <li><a href="#!/NewEvent">Add New Event</a></li> <li><a href="#!/DisplayEvent">Display Event</a></li> </ul> <div ng-view></div> </div> <script> var app = angular.module('sampleApp', ["ngRoute"]); app.config(function($routeProvider) { $routeProvider .when("/NewEvent", { templateUrl: "add_event.html", controller: "AddEventController" }) .when("/DisplayEvent", { templateUrl: "show_event.html", controller: "ShowDisplayController" }) .otherwise({ redirectTo: '/DisplayEvent' }); }); app.controller("AddEventController", function($scope) { $scope.message = "This is to Add a new Event"; }); app.controller("ShowDisplayController", function($scope) { $scope.message = "This is to display an Event"; }); </script> </body> </html>
⚠️ Ba điểm cần chỉnh sửa so với thông tin đăng tải ban đầu. Đầu tiên, các liên kết có nội dung như sau: #!NewEvent không có dấu gạch chéo trong khi các tuyến đường được khai báo là /NewEvent, vì vậy không có gì khớp. Từ AngularJS 1.6 trở đi, tiền tố băm mặc định là !, điều này tạo ra địa chỉ chính xác #!/NewEvent — một dấu gạch chéo sau dấu chấm than. Thứ hai, ShowDisplayController Đặt thông báo thành “Đây là hiển thị một Sự kiện”, thiếu từ đến mà đoạn văn xung quanh trích dẫn. Thứ ba, lib/bootstrap.js Đoạn mã này được tải từ một đường dẫn tương đối không dẫn đến đâu và không bao giờ được sử dụng, vì vậy nó đã bị xóa.
Bước 5) Tạo các trang add_event.html và show_event.htmlMỗi phần tử đều chứa một tiêu đề và một biểu thức hiển thị thông báo được bộ điều khiển của nó chèn vào.
- add_event.html
<h2>Add New Event</h2> {{message}}
- show_event.html
<h2>Show Event</h2> {{message}}
Nếu đoạn mã được thực thi thành công, kết quả sau sẽ hiển thị trên trình duyệt.
Đầu ra:
Các lỗi thường gặp khi sử dụng ng-view và cách khắc phục chúng.
Hầu hết các lỗi của ng-view đều xuất phát từ việc kết nối module, định dạng địa chỉ hoặc cách trang được phục vụ, chứ không phải từ chính chỉ thị đó.
- Vùng hiển thị vẫn trống: các
ngRouteMô-đun không được liệt kê là một phần phụ thuộc, hoặcangular-route.jschưa được tải. Cả hai đều cần thiết, và tập lệnh phải được đặt sauangular.min.js. - Các liên kết thay đổi địa chỉ nhưng nội dung không được hiển thị: Thuộc tính href không khớp với đường dẫn. Từ AngularJS 1.6 trở đi, địa chỉ cần...
#!/Route; mã cũ được viết cho phiên bản 1.5 đã được sử dụng.#/Route. - Các mẫu không tải được do lỗi CORS: Trang này được mở trực tiếp từ ổ đĩa. Hãy phục vụ nó qua HTTP, bởi vì
templateUrlDữ liệu được tải về bằng yêu cầu AJAX, nhưng giao thức tập tin lại bị chặn. - Chỉ có khung cảnh cuối cùng được hiển thị: Nhiều hơn một phần tử mang thuộc tính ng-view. AngularJS chỉ hỗ trợ một vùng hiển thị duy nhất trên mỗi trang.
- Không có gì hiển thị khi tải lần đầu: Không
otherwiseĐiều khoản được cấu hình sao cho địa chỉ trống không khớp với bất kỳ tuyến đường nào.










