Javascript 我应该在index.html中包含所有控制器的所有脚本标记吗?

Javascript 我应该在index.html中包含所有控制器的所有脚本标记吗?,javascript,angularjs,controller,Javascript,Angularjs,Controller,我正在使用angularjs创建一个SPA,在管理面板中为每个功能创建一个单独的文件夹,其中包含局部视图和控制器,如下所示: 我现在面临的问题是,我发现自己必须添加一个脚本标记,该标记引用所有控制器的所有.JS文件 这意味着,如果用户正在查看客户机数据、订单、产品等的整个脚本。。。。。将加载 现在,如果我的应用程序中有大约100个控制器,那么毫无理由地加载大量JS脚本 很抱歉,我已经编程17年了,从php到python,我以前使用angularjs作为ionic framework应用程

我正在使用angularjs创建一个SPA,在管理面板中为每个功能创建一个单独的文件夹,其中包含局部视图和控制器,如下所示:

我现在面临的问题是,我发现自己必须添加一个脚本标记,该标记引用所有控制器的所有.JS文件


这意味着,如果用户正在查看客户机数据、订单、产品等的整个脚本。。。。。将加载

现在,如果我的应用程序中有大约100个控制器,那么毫无理由地加载大量JS脚本

很抱歉,我已经编程17年了,从php到python,我以前使用angularjs作为ionic framework应用程序的一部分,但从未作为web应用程序
这也是我第一次问有关堆栈溢出的问题,请耐心等待,并提前表示感谢。

对于此问题,我们可以使用:

在本例中,我们使用
ui路由器
更改路由,并使用每个路由加载状态文件作为控制器或服务

$stateProvider.state("main", {
    url: "/",
    templateUrl: "view.html",
    controller: "mainController",
    resolve: {
        loadMyCtrl: ["$ocLazyLoad", function ($ocLazyLoad) {
            return $ocLazyLoad.load({
                files: ["mainController.js"] //["mainController.js", "mainService.js"]
            });
        }]
    }
});

对于此问题,我们可以使用:

在本例中,我们使用
ui路由器
更改路由,并使用每个路由加载状态文件作为控制器或服务

$stateProvider.state("main", {
    url: "/",
    templateUrl: "view.html",
    controller: "mainController",
    resolve: {
        loadMyCtrl: ["$ocLazyLoad", function ($ocLazyLoad) {
            return $ocLazyLoad.load({
                files: ["mainController.js"] //["mainController.js", "mainService.js"]
            });
        }]
    }
});

下面是如何在不使用任何库的情况下延迟加载控制器

首先获取您引导应用程序的控件提供程序的引用。您可以将其附加到应用程序对象本身

var myApp = angular.module('myapp', [])
.config(['$controllerProvider', function($controllerProvider) {
    myApp.controlProvider = $controllerProvider;
}]);
现在,将控制器放入.js中,或者放入要添加到DOM中的html文件中的脚本中,或者,也可以放入路由中

myApp.controlProvider.register('my-lazy-controller', ['$scope', function($scope) {
}])

如果您不想在路由中使用它,请使用适当的方法加载此新脚本或html。如果您在html文件中有控制器,您可以使用jQuery
.load()
,或者使用jQuery
getScript()
加载.js文件

以下是如何在不使用任何库的情况下延迟加载控制器

首先获取您引导应用程序的控件提供程序的引用。您可以将其附加到应用程序对象本身

var myApp = angular.module('myapp', [])
.config(['$controllerProvider', function($controllerProvider) {
    myApp.controlProvider = $controllerProvider;
}]);
现在,将控制器放入.js中,或者放入要添加到DOM中的html文件中的脚本中,或者,也可以放入路由中

myApp.controlProvider.register('my-lazy-controller', ['$scope', function($scope) {
}])

如果您不想在路由中使用它,请使用适当的方法加载此新脚本或html。如果您的html文件中有控制器,则可以使用jQuery
.load()
,或者使用jQuery
getScript()
加载.js文件

如果您担心服务器将接受的请求量,则可以根据代码的结构来捆绑代码。您还可以按客户只要求您需要的内容而不要求其他内容的方式拆分捆绑包。感谢您的快速响应,请您添加有关捆绑我的代码的更多详细信息?此外,困扰我的不仅仅是对服务器的请求量,我感觉让我的应用程序的所有业务逻辑始终呈现在用户手中并不是最好的选择。AngularJS框架的一个限制是HTML是延迟加载的,而控制器、指令和服务不是。(它们是延迟实例化的,但不是延迟加载的。)有第三方代码用于延迟加载、绑定和缩小。对于Stackoverflow来说,提出建议或编写教程都是无关紧要的。如果您担心服务器将接受的请求量,那么可以根据代码的结构来捆绑代码。您还可以按客户只要求您需要的内容而不要求其他内容的方式拆分捆绑包。感谢您的快速响应,请您添加有关捆绑我的代码的更多详细信息?此外,困扰我的不仅仅是对服务器的请求量,我感觉让我的应用程序的所有业务逻辑始终呈现在用户手中并不是最好的选择。AngularJS框架的一个限制是HTML是延迟加载的,而控制器、指令和服务不是。(它们是延迟实例化的,但不是延迟加载的。)有第三方代码用于延迟加载、绑定和缩小。对Stackoverflow来说,提出建议或编写教程都是离题的。