2015-03-18 14 views
6

Tôi đang sử dụng AngularJS lần đầu tiên. Tôi đã triển khai thành công một trang ng-view trong trang index.html của mình chứa mẫu header.html. Vì vậy, nó trông giống như dưới đâyLàm cách nào để thực hiện nhiều chế độ xem với Angular để hỗ trợ tiêu đề và thanh bên?

enter image description here

Nhưng bây giờ tôi đang tạo ra một bảng điều khiển (dashboard.html). Vì vậy, tôi có một menu bên trái trong-ngoài header.html để nó trông như thế này:

enter image description here

index.html của tôi là tương tự như sau:

<div ng-include="'templates/header.html'"></div> 
<div class="main" id="main-no-space" > 
    <div id="main-page"> 
    <div id="wrapper" class="container"> 
     <div class='container'> 
     <div ng-view></div> 
     </div> 
    </div> 
    </div> 
<div ng-include="'templates/footer.html'"> 

bảng điều khiển của tôi .html tương tự như vậy:

<div class="collapse navbar-collapse navbar-ex1-collapse"> 
    <ul class="nav navbar-nav side-nav"> 
     <li class="active"> 
     <a ng-href="#/link1">Link 1</a> 
     </li> 
     <li> 
     <a ng-href="#/link2">Link 2</a> 
     </li> 
     <li> 
     <a ng-href="#/link3">Link 3</a> 
     </li> 
    </ul> 
    </div> 

Trả lời

1

Hãy thử điều này:

angular.module('app', ['ngRoute']) 
 
    .config(['$routeProvider', function ($routeProvider) { 
 
    $routeProvider. 
 
    when('/dashboard', { 
 
     templateUrl: 'dashboard.html', 
 
     controller: DashboardCtrl 
 
    }) 
 
     .otherwise({ 
 
     redirectTo: '/dashboard' 
 
    }); 
 
}]); 
 

 
function DashboardCtrl() { 
 

 
}
* { 
 
    box-sizing: border-box; 
 
} 
 
#main:after { 
 
    content: ""; 
 
    display: block; 
 
    clear: both; 
 
} 
 
#header { 
 
    padding: 20px; 
 
    border: 1px solid #000; 
 
} 
 
#main { 
 
    padding: 20px; 
 
    border: 1px solid #000; 
 
} 
 
#sidebar { 
 
    padding: 20px; 
 
    border: 1px solid #000; 
 
    float: left; 
 
    width: 20%; 
 
} 
 
#content { 
 
    padding: 20px; 
 
    border: 1px solid #000; 
 
    float: right; 
 
    width: 78%; 
 
} 
 
#footer { 
 
    padding: 20px; 
 
    border: 1px solid #000; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.14/angular.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.14/angular-route.js"></script> 
 
<div ng-app="app"> 
 
    <div ng-include="'header.html'" id="header"></div> 
 
    <div class="main" id="main-no-space"> 
 
     <div id="main-page"> 
 
      <div id="wrapper" class="container"> 
 
       <div class="container"> 
 
        <div ng-view id="main">loading...</div> 
 
       </div> 
 
      </div> 
 
     </div> 
 
     <div ng-include="'footer.html'" id="footer"></div> 
 
    </div> 
 
    <script type="text/ng-template" id="dashboard.html"> 
 
     <div ng-include="'sidebar.html'" id="sidebar"></div> 
 
     <div id="content">dashboard</div> 
 
    </script> 
 
    <script type="text/ng-template" id="header.html"> 
 
     header 
 
    </script> 
 
    <script type="text/ng-template" id="sidebar.html"> 
 
     sidebar 
 
    </script> 
 
    <script type="text/ng-template" id="footer.html"> 
 
     footer 
 
    </script> 
 
</div>

JSFiddle http://jsfiddle.net/mcVfK/928/

+0

Cảm ơn câu trả lời chi tiết. nhưng tôi hơi bối rối. Trong fiddle không có liên kết. Trong ví dụ của tôi có các liên kết trong tiêu đề và trong thanh bên. Khi một liên kết trong thanh bên được nhấp thì khu vực nội dung sẽ thay đổi dựa trên liên kết đó trong khi tiêu đề vẫn giữ nguyên. – birdy

+0

Tôi đã có thể lấy fiddle của bạn và cập nhật nó theo nhu cầu của tôi. http://jsfiddle.net/mcVfK/929/ Nó hoạt động như nó là tuy nhiên, để được hiệu quả, làm thế nào tôi có thể tránh bao gồm sidebar.html trên mỗi liên kết bên? – birdy

+1

@birdy oh okay, tôi hiểu lầm câu hỏi của bạn. Xem http://jsfiddle.net/mcVfK/933/ –

0

Một tùy chọn sẽ xem xét ui-router vì nó cho phép bạn tùy biến dễ dàng như vậy.

Tùy chọn thứ hai là tạo điều khiển tráiNav tách khỏi bảng điều khiển và sau đó đưa nó vào index.html. Hiển thị và ẩn nó dựa trên chế độ xem đang kích hoạt.

Xem một trong những câu trả lời cũ của tôi Slicing an SPA into several components and use AngularJS

+0

tôi nhìn thấy. Vì vậy, 'dashboard.html' sẽ là một mẫu riêng biệt (tương tự như 'header.html'). Làm thế nào tôi sẽ hiển thị/giấu nó? Tôi không thấy điều đó trong câu trả lời mà bạn chỉ vào – birdy

+0

có thể có một 'bảng điều khiển-leftnav.html'. Điều này sẽ chứa chế độ xem cụ thể cho điều hướng bên trái được hiển thị với trang tổng quan. 'Dashboard.html' sẽ là chế độ xem chính, được xem trong chế độ xem ng như các chế độ xem khác. Khu vực mà bạn đã đánh dấu 'nội dung' – Chandermani

+0

Vấn đề là theo cách đó tôi phải bao gồm' dashboard-leftnav.html' trong 'index.html'. Nhưng sau đó nó sẽ được hiển thị cho tất cả các trang. Tôi chỉ muốn nó hiển thị khi liên kết 'Bảng điều khiển' được nhấp vào điều hướng tiêu đề. – birdy

Các vấn đề liên quan