How to use ng-switch as a router for my pages with ngRoute & ngView?

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-19 11:54:39

问题


Here is the highlevel skeleton of my Angular SPA. My application is about college degree offerings. In that engineering page has a separate left nav which is currently built on ng-switch which i want to convert as route. How do i do that just using angular's native routing angular-route.js?

**app.js**
(function(){
   var app=angular.module("myCollege",['ngRoute']);

   app.config(['$routeProvider','$locationProvider',  
          function($routeProvider,$locationProvider) {

            $routeProvider 

                 .when('/', {
                       templateUrl:"app/views/home.html",
                       controller:"homeController",
                       }

                    .when('/engg', {
                       templateUrl:"app/views/engineering.html",
                       controller:"engineeringController",
                       })
                    .when('/med', {
                       templateUrl:"app/views/medical.html",
                       controller:"medicalController",
                       })

                  }]);

I have left nav in engineering.html using ng-switch which i want to convert as sub-route of the application.This left nav of engineering page is not inside of ngView. How do i acheive this using angular's native ngRoute/angular-route?

**engineering.html**

<div nav ng-switch on="pagename()">
        <div ng-switch-when="Civil Engineering">
               <div civil-directive> </div>
         </div>
         <div ng-switch-when="Computer Engineering">
               <div computer-directive> </div>
         </div>
         <div ng-switch-when="Nano Engineering">
               <div nano-directive> </div>
         </div>
         <div ng-switch-when="Electrical Engineering">
               <div electrical-directive> </div>
         </div>
     </div>

EngineeringController.js

(function() {
var app =angular.module("collegeApp");
var engineeringController= functino($scope,$rootscope,$location)

 {

   $scope.pagename = function() {
      return $location.path();
   };
app.controller("engineeringController",['$scope','$rootScope','$location',engineeringController])
}());

The above logic is not working for me. Can someone tell me where i am doing the wrong?


回答1:


Not a good practice but here's what you want to do if you want to use ng-switch:

In your html, as you write for example:

<!-- don't forget to reference your app and your controller -->
<button ng-click="goTo('/page1')">Go to page 1</button>
<button ng-click="goTo('/page2')">Go to page 2</button>
<div nav ng-switch on="pagename()">
     <div ng-switch-when="'/page1'"></div>
     <div ng-switch-when="'/page2'"></div>
</div>
<div ng-view> </div> 

in js

Config your routes
app.config(['$routeProvider',
    function($routeProvider) {
        $routeProvider.
            when('/page1', {
                templateUrl: 'views/page1.html'
            }).
            when('/page2', {
                templateUrl: 'views/page2.html'
            }).
            otherwise({
                redirectTo: '/'
            });
    }])

and add the following in your controller:

$scope.pagename = function() { return $location.path(); };

    $scope.goTo = function(page){
        $location.path(page);
    }

In the html above, ng-switch will use the $location.path() variable to know which view to display.

As I said this is not a good practice, because your controller isn't suppose to deal with routes.



来源:https://stackoverflow.com/questions/36438211/how-to-use-ng-switch-as-a-router-for-my-pages-with-ngroute-ngview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!