Tôi đang xây dựng một ứng dụng web động bằng cách sử dụng AngularJS. Có thể có nhiều ng-view
trên một mẫu không?
Tôi đang xây dựng một ứng dụng web động bằng cách sử dụng AngularJS. Có thể có nhiều ng-view
trên một mẫu không?
Câu trả lời:
Bạn có thể có một ng-view
.
Bạn có thể thay đổi nội dung của nó bằng nhiều cách: ng-include
, ng-switch
hay bộ điều khiển và các mẫu lập bản đồ khác nhau thông qua các routeProvider.
ng-show
và ng-hide
và kiểm soát mức độ hiển thị của chúng bằng các biến? Bởi vì đôi khi tôi có thể muốn ẩn / hiển thị nhiều thành phần
UI-Router là một dự án có thể giúp: https://github.com/angular-ui/ui-router Một trong những tính năng của nó là Nhiều chế độ xem được đặt tên
UI-Router có nhiều tính năng và tôi khuyên bạn nên sử dụng nó nếu bạn đang làm việc trên một ứng dụng nâng cao.
Kiểm tra tài liệu của nhiều lượt xem được đặt tên ở đây .
Tôi tin rằng bạn có thể hoàn thành nó chỉ bằng cách độc thân ng-view
. Trong mẫu chính, bạn có thể có ng-include
các phần cho chế độ xem phụ, sau đó trong bộ điều khiển chính xác định các thuộc tính mô hình cho từng mẫu phụ. Vì vậy, họ sẽ tự động liên kết với ng-include
các phần. Điều này giống như có nhiềung-view
Bạn có thể kiểm tra ví dụ được đưa ra trong ng-include
tài liệu
trong ví dụ khi bạn thay đổi mẫu từ danh sách thả xuống, nó sẽ thay đổi nội dung. Ở đây giả sử bạn có một chính ng-view
và thay vì chọn thủ công nội dung phụ bằng cách chọn thả xuống, bạn làm điều đó như khi chế độ xem chính được tải.
ng-include
tài liệu , nhưng đó không phải là mẫu kiến trúc ứng dụng mong muốn, UI-Router là loại giải pháp phù hợp.
Sử dụng ng-view
mô-đun thông thường, bạn không thể có nhiều hơn một mẫu động.
Tuy nhiên, dự án này cho phép bạn làm như vậy (tìm kiếm ui-router
).
Có thể có nhiều khung nhìn hoặc lồng nhau. Nhưng không phải bởi ng-view.
Các mô-đun định tuyến chính trong góc không hỗ trợ nhiều chế độ xem. Nhưng bạn có thể sử dụng ui-router. Đây là mô-đun của bên thứ ba mà bạn có thể nhận được thông qua Github, angular-ui / ui-router, https://github.com/angular-ui/ui-router . Ngoài ra, một phiên bản mới của ngRouter (ngNewRouter) hiện đang được phát triển. Hiện tại nó không ổn định. Vì vậy, tôi cung cấp cho bạn một ví dụ khởi động đơn giản với bộ định tuyến ui. Sử dụng nó, bạn có thể đặt tên cho các khung nhìn và chỉ định các mẫu và bộ điều khiển nào sẽ được sử dụng để hiển thị chúng. Sử dụng $ stateProvider, bạn nên chỉ định cách hiển thị giữ chỗ cho trạng thái cụ thể.
<body ng-app="main">
<script type="text/javascript">
angular.module('main', ['ui.router'])
.config(['$locationProvider', '$stateProvider', function ($locationProvider, $stateProvider) {
$stateProvider
.state('home', {
url: '/',
views: {
'header': {
templateUrl: '/app/header.html'
},
'content': {
templateUrl: '/app/content.html'
}
}
});
}]);
</script>
<a ui-sref="home">home</a>
<div ui-view="header">header</div>
<div ui-view="content">content</div>
<div ui-view="bottom">footer</div>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.js">
</body>
Bạn cần tham khảo angularjs và angular-ui.router cho mẫu này.
$ bower install angular-ui-router
Bạn không thể có nhiều ng-view. Dưới đây là trường hợp sử dụng của tôi, nơi tôi đã giải quyết yêu cầu của tôi. Tôi muốn có hành vi theo thẻ trong hộp thoại mô hình của tôi. Tôi đã phải đối mặt với vấn đề khi nhấp vào các tab có siêu liên kết sẽ gọi các liên kết bộ định tuyến. Tôi đã giải quyết điều này bằng cách sử dụng nút và css cho các tab. Khi người dùng nhấp vào tab, nó thực sự sẽ không gọi bất kỳ siêu liên kết nào sẽ luôn gọi ng-router. Khi người dùng nhấp vào tab, nó sẽ gọi một phương thức, trong đó tôi tự động tải html. Dưới đây là chức năng nhấp chuột vào tab
self.submit = function(form) {
$templateRequest('resources/items/employee/test_template.html').then(function(template){
var compiledeHTML = $compile(template)($scope);
$("#d").replaceWith(compiledeHTML);
});
Người dùng $ templateRequest. Trong trang test_template.html thêm nội dung html của bạn. Nội dung html này sẽ được liên kết với bộ điều khiển của bạn.