2015-06-22 54 views
1

我從wrapbootrap購買了一個模板,但是其中提供的代碼使用了UI路由插件。 ui路由非常棒,因爲您可以擁有狀態,視圖,嵌套視圖。但它不適用於Azure身份驗證的ADAL身份驗證庫。如何將此代碼從UI路由更改爲核心ng-Route

下面的代碼是由主題所提供的一個:

Config.js

function config($stateProvider, $urlRouterProvider, $ocLazyLoadProvider, IdleProvider, KeepaliveProvider, adalAuthenticationServiceProvider, $httpProvider) { 

    // Configure Idle settings 
    IdleProvider.idle(5); // in seconds 
    IdleProvider.timeout(120); // in seconds 

    $urlRouterProvider.otherwise("/dashboards/dashboard_1"); 

    $ocLazyLoadProvider.config({ 
     // Set to true if you want to see what and when is dynamically loaded 
     debug: false 
    }); 

    $stateProvider 

     .state('dashboards', { 
      abstract: true, 
      url: "/dashboards", 
      templateUrl: "views/common/content.html", 

     }) 
     .state('dashboards.dashboard_1', { 
      url: "/dashboard_1", 
      templateUrl: "views/dashboard_1.html", 
      requireADLogin: true, 
      resolve: { 
       loadPlugin: function ($ocLazyLoad) { 
        return $ocLazyLoad.load([ 
         { 

          serie: true, 
          name: 'angular-flot', 
          files: ['js/plugins/flot/jquery.flot.js', 'js/plugins/flot/jquery.flot.time.js', 'js/plugins/flot/jquery.flot.tooltip.min.js', 'js/plugins/flot/jquery.flot.spline.js', 'js/plugins/flot/jquery.flot.resize.js', 'js/plugins/flot/jquery.flot.pie.js', 'js/plugins/flot/curvedLines.js', 'js/plugins/flot/angular-flot.js', ] 
         }, 
         { 
          name: 'angles', 
          files: ['js/plugins/chartJs/angles.js', 'js/plugins/chartJs/Chart.min.js'] 
         }, 
         { 
          name: 'angular-peity', 
          files: ['js/plugins/peity/jquery.peity.min.js', 'js/plugins/peity/angular-peity.js'] 
         } 
        ]); 
       } 
      } 
     }) 

的index.html

<!DOCTYPE html> 
<html ng-app="inspinia"> 

<head> 

    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 

    <!-- Page title set in pageTitle directive --> 
    <title page-title></title> 

    <!-- Font awesome --> 
    <link href="font-awesome/css/font-awesome.css" rel="stylesheet"> 

    <!-- Bootstrap --> 
    <link href="css/bootstrap.min.css" rel="stylesheet"> 

    <!-- Main Inspinia CSS files --> 
    <link href="css/animate.css" rel="stylesheet"> 
    <link id="loadBefore" href="css/style.css" rel="stylesheet"> 


</head> 

<!-- ControllerAs syntax --> 
<!-- Main controller with serveral data used in Inspinia theme on diferent view --> 
<body ng-controller="MainCtrl as main"> 

<!-- Main view --> 
<div ui-view></div> 

<!-- jQuery and Bootstrap --> 
<script src="js/jquery/jquery-2.1.1.min.js"></script> 
<script src="js/plugins/jquery-ui/jquery-ui.js"></script> 
<script src="js/bootstrap/bootstrap.min.js"></script> 

<!-- MetsiMenu --> 
<script src="js/plugins/metisMenu/jquery.metisMenu.js"></script> 

<!-- SlimScroll --> 
<script src="js/plugins/slimscroll/jquery.slimscroll.min.js"></script> 

<!-- Peace JS --> 
<script src="js/plugins/pace/pace.min.js"></script> 

<!-- Custom and plugin javascript --> 
<script src="js/inspinia.js"></script> 

<!-- Main Angular scripts--> 
<script src="js/angular/angular.min.js"></script> 
<script src="js/plugins/oclazyload/dist/ocLazyLoad.min.js"></script> 
<script src="js/angular-translate/angular-translate.min.js"></script> 
<script src="js/ui-router/angular-ui-router.min.js"></script> 
<script src="https://code.angularjs.org/1.2.25/angular-route.js"></script> 
<script src="js/bootstrap/ui-bootstrap-tpls-0.12.0.min.js"></script> 
<script src="js/plugins/angular-idle/angular-idle.js"></script> 

<!-- 
You need to include this script on any page that has a Google Map. 
When using Google Maps on your own site you MUST signup for your own API key at: 
https://developers.google.com/maps/documentation/javascript/tutorial#api_key 
After your sign up replace the key in the URL below.. 
--> 
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDQTpXj82d8UpCi97wzo_nKXL7nYrd4G70"></script> 

<!-- Latest compiled and minified JavaScript --> 
<script src="js/adal/adal.min.js"></script> 
<script src="js/adal/adal-angular.js"></script> 

<!-- Anglar App Script --> 
<script src="js/app.js"></script> 
<script src="js/config.js"></script> 
<script src="js/translations.js"></script> 
<script src="js/directives.js"></script> 
<script src="js/controllers.js"></script> 

</body> 
</html> 

和content.html

<!-- Wrapper--> 
<div id="wrapper"> 

    <!-- Navigation --> 
    <div ng-include="'views/common/navigation.html'"></div> 

    <!-- Page wraper --> 
    <!-- ng-class with current state name give you the ability to extended customization your view --> 
    <div id="page-wrapper" class="gray-bg {{$state.current.name}}"> 

     <!-- Page wrapper --> 
     <div ng-include="'views/common/topnavbar.html'"></div> 

     <!-- Main view --> 
     <div ui-view></div> 

     <!-- Footer --> 
     <div ng-include="'views/common/footer.html'"></div> 

    </div> 
    <!-- End page wrapper--> 

    <!-- Right Sidebar --> 
    <div ng-include="'views/common/right_sidebar.html'"></div> 

</div> 
<!-- End wrapper--> 

然而,作爲t他的UI路由不適合ADAL,我改變了config.JS,現在我的身份驗證使用azure完美無缺。

function config($routeProvider, $httpProvider, adalAuthenticationServiceProvider){ 

    $routeProvider.when("/dashboard_1", { 
     controller: "MainCtrl", 
     templateUrl: "/views/dashboard_1.html", 
     requireADLogin: true, 
     resolve: { 
         loadPlugin: function ($ocLazyLoad) { 
          return $ocLazyLoad.load([ 
           { 

            serie: true, 
            name: 'angular-flot', 
            files: [ 'js/plugins/flot/jquery.flot.js', 'js/plugins/flot/jquery.flot.time.js', 'js/plugins/flot/jquery.flot.tooltip.min.js', 'js/plugins/flot/jquery.flot.spline.js', 'js/plugins/flot/jquery.flot.resize.js', 'js/plugins/flot/jquery.flot.pie.js', 'js/plugins/flot/curvedLines.js', 'js/plugins/flot/angular-flot.js', ] 
           }, 
           { 
            name: 'angles', 
            files: ['js/plugins/chartJs/angles.js', 'js/plugins/chartJs/Chart.min.js'] 
           }, 
           { 
            name: 'angular-peity', 
            files: ['js/plugins/peity/jquery.peity.min.js', 'js/plugins/peity/angular-peity.js'] 
           } 
          ]); 
         } 
        } 
    }).otherwise({ redirectTo: "/dashboard_1" }); 

    adalAuthenticationServiceProvider.init(
     { 
      instance: 'https://login.microsoftonline.com/', 
      tenant: 'mysaasapp.onmicrosoft.com', 
      clientId: '33e037a7-b1aa-42ab-9693-6c22d01ca338', 
      extraQueryParameter: 'nux=1' 
      //cacheLocation: 'localStorage', // enable this for IE, as sessionStorage does not work for localhost. 
     }, 
     $httpProvider 
     );  
} 
angular 
    .module('inspinia') 
    .config(config) 
    .run(function($rootScope, $state) { 
     $rootScope.$state = $state; 
    }); 

的問題是,我不知道如何使用嵌套視圖或頁面佈局與核心NG路線,我應該如何重寫我的index.html/content.html以適應這種變化。

這導致我得到了我的內容呈現,但不是我的左側導航欄或頂部欄。

+0

ngRoute沒有嵌套視圖,或ngNewRouter 1.4+有。將ui-view更改爲index.html上的ng-view並將其中的所有content.html移動。 – YOU

回答

1

在您的index.html文件中更改uiview通過ng-view。由於ng-route不允許嵌套視圖,因此您應該將路由提供程序中的content.html作爲另一個狀態包含在路由提供程序中。

相關問題