当前位置: 首页 > 面试题库 >

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

燕智
2023-03-14
问题内容

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

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

例如,当您在“ module1”时,您无法声明为“ module2”。

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


问题答案:

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

  1. 创建主应用程序“ mainApp.js
        angular.module("mainApp", [
      "ui.router"
    ]);

    angular.module("mainApp").config([
      "$stateProvider", "$urlRouterProvider",
      function($stateProvider, $urlRouterProvider) {

        $urlRouterProvider.otherwise("/");

        $stateProvider
          .state("/", {
            url: "/",
            templateUrl: "/Application/Partials/home.html"
          });
      }
    ]);
  1. index.html为您的mainApp 创建“ ”:
        <!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>
  1. 创建您的偏爱“ home.html

    <h1>Home</h1>
    
  2. registerStateApp在您的项目中添加“ ”

    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. 在主应用程序中更新“ mainApp.js&注入”registerStateApp
        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"
          });
      }
    ]);
  1. 创建您的子模块
        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);
      }
    ]);
  1. 创建子模块主视图
        <!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>
  1. 在主应用程序“ mainApp.js”中添加子模块状态
        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"
          });
      }
    ]);


 类似资料:
  • 问题内容: 我有这样的结构: 我希望能够在如下所示的主要状态下定义模板,而不必在子状态下进行管理。 我希望命名的ui视图不是其子状态,并由该状态的views对象而不是子状态的templateUrl字段填充。我怎样才能做到这一点? 问题答案: 我们可以在 一种* 状态下使用 更多 视图,请参阅: * 多个命名视图 该定义只需要使用绝对命名即可: 如此处详细说明: 视图名称-相对名称与绝对名称 在幕后

  • 本文向大家介绍angular-ui-router 使用$ state.go在状态之间转换,包括了angular-ui-router 使用$ state.go在状态之间转换的使用技巧和注意事项,需要的朋友参考一下 示例 $state.go 是速记法 $state.transitionTo $state.go(toState [,toParams] [,options]) 此方法自动将您的选项设置为{

  • 本文向大家介绍angular-ui-router 使用$ state.transitionTo在状态之间转换,包括了angular-ui-router 使用$ state.transitionTo在状态之间转换的使用技巧和注意事项,需要的朋友参考一下 示例 用于$state.transitionTo将一种状态转变为另一种状态。这是一种低级过渡方法,$state.go是内部最常用的推荐方法。 $st

  • 本文向大家介绍详解angular笔记路由之angular-router,包括了详解angular笔记路由之angular-router的使用技巧和注意事项,需要的朋友参考一下 本文介绍了angular笔记路由之angular-router,分享给大家,具体如下: 创建项目 路由的基本使用 名称 简介 Routes 路由的配置,保存着哪一个URL对应展示哪一个组件和在哪一个RouterOutler展

  • 问题内容: 建立一个多步骤表单(“向导”)。最初是按照本教程进行的,该教程效果很好,但是现在尝试对其进行调整,因此第一步已嵌入首页中,而不是单独的状态。无论我做什么,我都无法创建一条可行的路径。我总是得到: 无法从状态“ home”解析“ .where” 要么 无法从状态“家”解析“ wizard.where” 要么 无法从状态“ home”解析“ wizard.where @” …即使在中效果很

  • 本文向大家介绍Angular 5.x 学习笔记之Router(路由)应用,包括了Angular 5.x 学习笔记之Router(路由)应用的使用技巧和注意事项,需要的朋友参考一下 序言: Angular APP 视图之间的跳转,依赖于 Router (路由),这一章,我们来讲述 Router 的应用 实例讲解 运行结果如下。 设置了3个导航栏, Home、 About、Dashboard。 点击不