2014-07-10 2 views
0

나는 asp.net mvc4 및 Angular JS (John Papa의 HotTowel.angular.Breeze SPA에서 시작)와 함께 작업하고 있습니다. sidebar.html에 드롭 다운 메뉴를 추가하고 config.route.js에 적절한 경로를 추가했습니다.각진 경로로 nav 메뉴 연결하기

난이도가 높은 부분은 드롭 다운 메뉴를 각도 경로에 올바르게 연결하는 것입니다.

아래의 "MR 보고서"드롭 다운 메뉴를 클릭하면 경로가 바로 실행됩니다 (예 : MR 보고서 위로 마우스를 가져 가면 "localhost : 49479/index.html # ". 즉,"MR 보고서 "는 드롭 다운 메뉴 여야하며 드롭 다운 메뉴 항목을 선택할 때까지 경로가 변경되지 않습니다.

변경 사항을 구성해야하는지 잘 모르겠습니다. .route.js 또는 sidebar.html 코드

업데이트 :. 내가 하위 메뉴가 있다면 동적으로 최상위 HREF 태그를 제외, 각 ngHref 지시어, ng-href="#{{r.url}}" 같은 것을 사용할 수 있으리라 믿고있어 . 아마도 ng-if="r.config.sub"을 가이드로 사용할 수 있습니다. 여기

는 (: 하위 메뉴에 대한 섹션 "하위"유의하시기 바랍니다) : config.route.js의 내용입니다

(function() { 
    'use strict'; 

var app = angular.module('app'); 

// Collect the routes 
app.constant('routes', getRoutes()); 

// Configure the routes and route resolvers 
app.config(['$routeProvider', 'routes', routeConfigurator]); 
function routeConfigurator($routeProvider, routes) { 

    routes.forEach(function (r) { 
     $routeProvider.when(r.url, r.config); 
    }); 
    $routeProvider.otherwise({ redirectTo: '/' }); 
} 

// Define the routes 
function getRoutes() { 
    return [ 
     { 
      url: '/', 
      config: { 
       templateUrl: 'app/dashboard/dashboard.html', 
       title: 'dashboard', 
       settings: { 
        nav: 1, 
        content: '<i class="fa fa-dashboard"></i> Dashboard' 
       } 
      } 
     }, { 
      url: '/admin', 
      config: { 
       title: 'admin', 
       templateUrl: 'app/admin/admin.html', 
       settings: { 
        nav: 2, 
        content: '<i class="fa fa-lock"></i> Admin' 
       } 
      } 
     }, 
     { 
      url: '/testgrid', 
      config: { 
       title: 'grids', 
       templateUrl: 'app/testgrid/testgrid.html', 
       settings: { 
        nav: 3, 
        content: '<i class="fa fa-globe"></i> TestGrid' 
       } 
      } 
     }, 
     {     
      config: { 
       title: 'reports', 
       templateUrl: 'app/testgrid/testgrid.html', 
       settings: { 
        nav: 4, 
        content: '<i class="fa fa-plus-square "></i> MR Reports <b class="caret"></b>' 
       }, 
       sub: [ 
       { 
        url: '/testgrid', 
        title: 'reports1', 
        templateUrl: 'app/testgrid/testgrid.html', 
        settings: { 
         content: 'TestGrid' 
        } 
       }, 
       { 
        url: '/admin', 
        title: 'Admin2', 
        templateUrl: 'app/admin/admin.html', 
        settings: { 
         content: 'Admin2' 
        } 
       } 
       ] 
      }, 
     }   
    ]; 
} 
})(); 

을 내 sidebar.html는 다음과 같이 정의된다 :

<div data-cc-sidebar data-ng-controller="sidebar as vm"> 
<div class="sidebar-filler"></div> 
<div class="sidebar-dropdown"><a href="#">Menu</a></div> 
<div class="sidebar-inner"> 
    <div class="sidebar-widget"> 
    </div>   

    <ul class="navi">      
     <li class="nlightblue fade-selection-animation"     
      ng-class="{dropdown: r.config.sub}" 
      data-ng-repeat="r in vm.navRoutes"> 

      <a href="#{{r.url}}" data-ng-bind-html="r.config.settings.content" ng-class="{'dropdown-toggle': r.config.sub}" data-ng-class="vm.isCurrent(r)" data-toggle="dropdown" ></a> 
      <ul ng-if="r.config.sub" class="dropdown-menu"> 
       <li ng-repeat="submenu in r.config.sub"> 
        <a href="#{{submenu.url}}" data-ng-bind-html="submenu.settings.content"></a> 
       </li> 

      </ul> 
     </li>                 
    </ul>   
</div>  

+0

사이드 바 - 드롭 다운 밖으로 "#"을 가져 가라. –

+0

@CorySilva - 드롭 다운 항목에 href 링크를'localhost : 49474/admin'로 렌더링하기 때문에 작동하지 않습니다. SmartAdmin 부트 스트랩 템플리트는 아주 잘 보입니다. 잘 이해하지 못하기 때문에 명확성을 위해 예제를 게시하겠습니다. –

답변

2

나는 내 해킹에 대한 미치지 않았어,하지만 일하게했다. ng-if을 사용하여 비 드롭 다운 메뉴 항목에 대한 href 링크를 렌더링하고 ng-if ~ EXCLUDE 드롭 다운의 href 태그를 사용했습니다.

그리고 getRoutes() 함수에서 드롭 다운의 최상위 수준에있는 url: 속성을 제외합니다.

<ul class="navi">     
     <li class="nlightblue fade-selection-animation"     
      ng-class="{dropdown: r.config.sub}" 
      data-ng-repeat="r in vm.navRoutes"> 

      <a ng-if="r.url" href="#{{r.url}}" data-ng-bind-html="r.config.settings.content" 
       ng-class="{'dropdown-toggle': r.config.sub}" 
       data-ng-class="vm.isCurrent(r)" 
       data-toggle="dropdown" ></a> 
      <a ng-if="r.config.sub" data-ng-bind-html="r.config.settings.content" 
       ng-class="{'dropdown-toggle': r.config.sub}" 
       data-ng-class="vm.isCurrent(r)" 
       data-toggle="dropdown" ></a> 

      <ul ng-if="r.config.sub" class="dropdown-menu"> 
       <li ng-repeat="submenu in r.config.sub"> 
        <a href="#{{submenu.url}}" data-ng-bind-html="submenu.settings.content"></a> 
       </li> 

      </ul> 
     </li> 

config.route.js 기능 :

function getRoutes() { 
    return [ 
     { 
      url: '/', 
      config: { 
       templateUrl: 'app/dashboard/dashboard.html', 
       title: 'dashboard', 
       settings: { 
        nav: 1, 
        content: '<i class="fa fa-dashboard"></i> Dashboard' 
       } 
      } 
     }, { 
      url: '/admin', 
      config: { 
       title: 'admin', 
       templateUrl: 'app/admin/admin.html', 
       settings: { 
        nav: 2, 
        content: '<i class="fa fa-lock"></i> Admin' 
       } 
      } 
     }, 
     { 
      url: '/testgrid', 
      config: { 
       title: 'grids', 
       templateUrl: 'app/testgrid/testgrid.html', 
       settings: { 
        nav: 3, 
        content: '<i class="fa fa-globe"></i> TestGrid' 
       } 
      } 
     }, 
     { // Exclude url: at this top level 
      config: { 
       title: 'reports',      
       settings: { 
        nav: 4, 
        content: '<i class="fa fa-plus-square "></i> MR Reports <b class="caret"></b>' 
       }, 
       sub: [ 
       { 
        url: '/testgrid', 
        title: 'reports1', 
        templateUrl: 'app/testgrid/testgrid.html', 
        settings: { 
         content: 'TestGrid' 
        } 
       }, 
       { 
        url: '/admin', 
        title: 'Admin2', 
        templateUrl: 'app/admin/admin.html', 
        settings: { 
         content: 'Admin2' 
        } 
       } 
       ] 
      }, 
     }   
    ]; 
} 
관련 문제