使用angular ui路由器在angular中创建嵌套路由应用程序,并在模块之间切换



我想在我的应用程序中使用带有多个子模块的angular-ui-router创建角度嵌套路由;

在"ui-router"中,我们可以在主应用程序配置中使用多视图作为$stateProvider,但当您在其他模块中时,不能在子模块之间切换。

例如,当您处于"module1"时,您不能声明为"module2"。

那么,我如何在模块之间切换?

在这个应用程序中,您可以轻松地在子模块之间路由:

  1. 创建主应用程序";CCD_ 6";

    angular.module("mainApp", [
      "ui.router"
    ]);
    angular.module("mainApp").config([
      "$stateProvider", "$urlRouterProvider",
      function($stateProvider, $urlRouterProvider) {
        $urlRouterProvider.otherwise("/");
        $stateProvider
          .state("/", {
            url: "/",
            templateUrl: "/Application/Partials/home.html"
          });
      }
    ]);
     

  2. 创建";CCD_ 7";适用于您的主要应用程序:

    <!DOCTYPE html>
    <html ng-app="mainApp">
    <head>
      <title>Angular Nested Routes with angula-ui-route</title>
    </head>
    <body>
      <fieldset>
        <legend>main menu</legend>
        <a ui-sref="/">home</a>
      </fieldset>
      <ui-view></ui-view>
      <script src="/Scripts/jquery-2.1.4.js"></script>
      <script src="/Scripts/angular.js"></script>
      <script src="/Scripts/angular-ui-router.js"></script>
      <!--Main Module-->
      <script src="/Application/app.js"></script>
    </body>
    </html>
     

  3. 创建您的Partials"CCD_ 8";

    <h1>Home</h1>
     

  4. 添加";CCD_ 9";在您的项目中

angular.module("registerStateApp", []);
angular.module("registerStateApp").provider("$registerState", function ($stateProvider) {
    var routes = [];
    this.$set = function (stateProvider) {
        var satetProviders = {
            states: stateProvider
        }
        routes.push(satetProviders);
    };
    this.$get = function () {
        return angular.forEach(routes, function (route) {
            angular.forEach(route.states, function (state) {
                $stateProvider.state(state.state, {
                    parent: state.parent,
                    moduleName: parent,
                    stateName: child,
                    name: state.pageName,
                    url: state.url,
                    views: state.views,
                    pageInfo: state.pageInfo
                });
            });
        });
    };
});

  1. 更新";CCD_ 10"&注入";CCD_ 11";在您的主要应用程序中

    angular.module("mainApp", [
      "ui.router",
      "registerStateApp"
    ]);
    angular.module("mainApp").config([
      "$stateProvider", "$urlRouterProvider", "$registerStateProvider",
      function($stateProvider, $urlRouterProvider, $registerStateProvider) {
        
        $urlRouterProvider.otherwise("/");
        
        //registerStateApp
        $registerStateProvider.$get();
        
        //your main application routes
        $stateProvider
          .state("/", {
            url: "/",
            templateUrl: "/Application/Partials/home.html"
          });
      }
    ]);
     

  2. 创建子模块

    angular.module("module1", []);
    angular.module("module1").config(["$registerStateProvider",
      function($registerStateProvider) {
        //This is your routing in sub module
        var stateProvider = [{
          name: "module1",
          state: "module1.page1",
          url: "/module1",
          views: {
            "module1": {
              templateUrl: "/Application/Modules/Module1/Partials/page1.html"
            }
          }
        }];
        $registerStateProvider.$set(stateProvider);
      }
    ]);
    //module2
    angular.module("module2", []);
    angular.module("module2").config(["$registerStateProvider",
      function($registerStateProvider) {
        var stateProvider = [{
          name: "module2",
          state: "module2.page1",
          url: "/module2",
          views: {
            "module2": {
              templateUrl: "/Application/Modules/Module2/Partials/page1.html"
            }
          }
        }];
        $registerStateProvider.$set(stateProvider);
      }
    ]);
     

  3. 创建子模块主视图

    <!DOCTYPE html>
    <html ng-app="module1">
    <head>
      <title>module1</title>
    </head>
    <body>
      <h1>This is module1</h1>
      <button ui-sref="module2.page1">go to module2 page 1</button>
      <div ui-view="module1"></div>
    </body>
    </html>
    <!--module2-->
    <!DOCTYPE html>
    <html ng-app="module2">
    <head>
      <title>module2</title>
    </head>
    <body>
      <h1>This is module2</h1>
      <button ui-sref="module1.page1">go to module1 page 1</button>
      <div ui-view="module2"></div>
    </body>
    </html>
     

  4. 在你的主应用程序中添加你的子模块状态"CCD_ 12";

    angular.module("mainApp", [
      "ui.router",
      "registerStateApp",
      "module1",
      "module2"
    ]);
    angular.module("mainApp").config([
      "$stateProvider", "$urlRouterProvider", "$registerStateProvider",
      function($stateProvider, $urlRouterProvider, $registerStateProvider) {
        $urlRouterProvider.otherwise("/");
        $registerStateProvider.$get();
        $stateProvider
          .state("/", {
            url: "/",
            templateUrl: "/Application/Partials/home.html"
          })
          .state("module1", {
            url: "/module1",
            templateUrl: "/Application/Modules/Module1/index.html"
          })
          .state("module2", {
            url: "/module2",
            templateUrl: "/Application/Modules/Module2/index.html"
          });
      }
    ]);
     

相关内容

  • 没有找到相关文章

最新更新