3

当我从一个视图更改为另一个视图时,我想加载一个控制器。

例如,我在主页中,用户想进入登录页面。我在一个不包含在 app.js(主要 AngularJS 脚本)中的文件中有一个 LoginController,我只想在用户进入登录页面时才加载它。

我看到了不同的解决方案,但非常复杂,我的控制器非常简单,我只想将它们放在不同的文件中,但如果我不打算使用它们,我不想加载控制器。

谢谢。

4

3 回答 3

1

您可能需要 ng-route。这是一个完全符合您要求的模块。(连同其他功能 -> ngRoute。您可以通过下一种方式定义路由。

var app = angular.module('app ', []);
app .config(['$routeProvider',
  function($routeProvider) {
  $routeProvider.
    when('/login', {
      templateUrl: 'login.html',
      controller: 'loginController'
    }).
    when('/home', {
      templateUrl: 'home.html',
      controller: 'homeController'
    }).
  otherwise({
    redirectTo: '/home'
  });
}]);

此外,您必须声明 loginController,但不用担心,如果您更改绑定到的视图,控制器会被销毁,并在您再次打开登录页面时重新创建。

于 2016-02-11T12:22:29.167 回答
1

我相信您正在寻找的是https://oclazyload.readme.io/。它将动态加载模块。我相信它是建立在 require.js 之上的。

于 2016-02-11T12:33:25.953 回答
0

AngularJS 是一个框架的单页应用程序会预先加载它的所有视图和代码。这是为了以(位)更大的加载时间为代价提供快速流畅的应用程序。由于代码不打算由 AngularJS 动态加载,因此您不会找到一个干净的解决方案来执行此操作。此外,我首先看不出有任何理由这样做。只要您的应用程序不是最大的应用程序之一,动态加载控制器就没有任何意义。如果您将所有代码放在一个文件中并最小化它,无论如何您都应该在生产环境中这样做,那么加载控制器将是您遇到的最少问题。将所有内容放在一个文件中并通过一个请求获取它比在视图之间动态加载它更快,

我的建议:不要这样做,不要尝试。它是有原因的,它很好:)

但是,如果您真的想实现这一点,那么您唯一的方法就是自己做所有事情:脚本加载、控制器实例化等。

于 2016-02-11T12:46:29.940 回答