javascript - AngularJS 多个 ngApps,每个都有自己的 ngRoute 定义,在一页上延迟加载和引导

标签 javascript angularjs angular-ui-router angular-ui angular-routing

我的问题来自需要在一个页面上延迟加载不同/分离的 ngApp(使用 angular.bootstrap 引导它们),每个 ngApp 都使用自己的 ngRoute 定义(以它们不相互重叠的方式定义) .

现在我有一个工作 plunkr示例和所有功能似乎都运行良好,但不知何故我觉得这不是正确的方法,所以这就是我在这里寻求建议的原因。

<!DOCTYPE html>
<html>

<head>
  <!-- Latest compiled and minified CSS -->
  <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
  <link rel="stylesheet" href="style.css">
  <script src="script.js"></script>
</head>

<body>

  <div class="container">
    <div class="col-xs-6 well" id="app1">
      <h3>App1</h3>
      <a href="#/app1/1">Route 1</a>
      <a href="#/app1/2">Route 2</a>
      <a href="#/app1/3">Route 3</a>
      <div class="well" ng-view></div>
    </div>


    <div class="col-xs-6 well" id="app2">
      <h3>App2</h3>
      <a href="#/app2/1">Route 1</a>
      <a href="#/app2/2">Route 2</a>
      <a href="#/app2/3">Route 3</a>
      <div class="well" ng-view></div>
    </div>
  </div>

  <script type="text/javascript" src="https://code.angularjs.org/1.2.21/angular.min.js"></script>
  <script type="text/javascript" src="https://code.angularjs.org/1.2.21/angular-route.min.js"></script>
  <script>
    var app1 = angular.module('app1', ['ngRoute']);
    app1
      .config(function($routeProvider) {
        $routeProvider
          .when('/:app/:param', {
            template: 'app = {{app}}, param = {{param}}',
            controller: 'Ctrl1'
          })
      })
      .controller("Ctrl1",['$scope','$routeParams', function($scope,$routeParams) {
        $scope.app = $routeParams.app;
        $scope.param = $routeParams.param;
      }]);

    var app2 = angular.module('app2', ['ngRoute']);
    app2
      .config(function($routeProvider) {
        $routeProvider
          .when('/:app/:param', {
            template: 'app = {{app}}, param = {{param}}',
            controller: 'Ctrl2'
          })
      })
      .controller("Ctrl2", ['$scope','$routeParams', function($scope,$routeParams) {
        $scope.app = $routeParams.app;
        $scope.param = $routeParams.param;
      }]);

    angular.bootstrap(document.getElementById("app1"), ['app1']);
    angular.bootstrap(document.getElementById("app2"), ['app2']);
  </script>



</body>

</html>

http://plnkr.co/edit/Y7A9bc3bDUyAXIS13JMZ?p=preview

仅供引用:我已经检查了 ui-router 以在一个页面上加载单独的状态,但这都需要预先加载源代码(并且有一个包含所有路由的 app.config)这是什么我不想要,因为该项目非常庞大。因此,为了保持简单和模块化,我正在寻找与上述示例类似的东西。

更新以回答 HockeyJ 问题: 好的,我会尽量保持简短。非常基本上 - 正如我所说,从源代码和模块依赖性的 Angular 来看,该项目可能会变得非常庞大。这就是为什么我想以这样的方式制作它,每个模块都可以是完全独立的应用程序,能够在任何地方注入(inject)并单独测试(这不是 AnJS 的真正问题)。但与此同时,整个项目应该是一个单页应用程序。因此,不应该有屏幕重新加载(加载 App jscript 文件)等。因此出现了按需延迟加载脚本并将应用程序引导到 DOM 元素。所有应用程序唯一可能的交叉点是 URL 路由,它对路由有严格的命名约定,即/reports/whatever ;/transactions/whatever 等等,应该由 ngRoute 管理。

最佳答案

更新:

结帐 overmind Angular 项目和演示 here

Shows a project broken up into several apps: nav, home, profile, and admin. The nav app is always on the page and is the only app bootstrapped on pageload.

只需将路由从 Angular 中移除,并使用诸如 sammy.js 、 history.js 等的东西进行客户端路由。

使用

angular.bootstrap(module, node)

在你的 sammy 处理程序的路由中

您可能还想看看 react.js(有或没有助焊剂)并以同样的方式使用 sammy 来解决它。考虑来自 todombc 的这个例子:https://github.com/tastejs/todomvc/tree/gh-pages/architecture-examples/react

关于javascript - AngularJS 多个 ngApps,每个都有自己的 ngRoute 定义,在一页上延迟加载和引导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25181386/

相关文章:

javascript - JavaScript 调试延迟

css - AngularJS 表格进入/离开动画

angularjs - 使用 Ionic 框架清除历史记录并在登录/注销时重新加载页面

javascript - 如何使用多个 document.getElementById 的?

javascript - JS : get hostname from url , 正则表达式不工作

javascript - 如何从 angularjs Controller 返回 html 中的值

javascript - ng-model 不更新 Controller 值

javascript - 实现 UI Router Hierarchy/category/category/product 的最佳方式

javascript - 带有 Angular ui-router 的纯 CSS 模态 (::target)

javascript - SEC7118 : XMLHttpRequest CORS - IE Console message