【发布时间】:2014-07-02 14:26:26
【问题描述】:
我正在尝试制作一个简单的单页移动应用程序,它具有多个视图和一个下一步\后退按钮来控制每个视图。我正在使用 Angular Mobile UI 库。
基本样机如下:
<html>
<head>
<link rel="stylesheet" href="mobile-angular-ui/dist/css/mobile-angular-ui-base.min.css">
<link rel="stylesheet" href="mobile-angular-ui/dist/css/mobile-angular-ui-desktop.min.css">
<script src="js/angular/angular.min.js"></script>
<script src="js/angular/angular-route.min.js"></script>
<script src="mobile-angular-ui/dist/js/mobile-angular-ui.min.js"></script>
<script src="app/app.js"></script>
<script src="app/firstController.js"></script>
<script src="app/secondController.js"></script>
<script src="app/thirdController.js"></script>
</head>
<body ng-app="demo-app">
<div ng-view></div>
<div ng-controller="nextBackController" class="navbar navbar-app navbar-absolute-bottom">
<div class="btn-group justified">
<a href="#/" class="btn btn-navbar btn-icon-only"><i class="fa fa-home fa-navbar"></i></a>
<a href="#/second" class="btn btn-navbar btn-icon-only"><i class="fa fa-list fa-navbar"></i></a>
</div>
</div>
</body>
</html>
App.js如下:
var app = angular.module('demo-app', [
"ngRoute",
"mobile-angular-ui"
]);
app.config(function($routeProvider) {
$routeProvider.when('/', { controller: "firstController",
templateUrl: "views/first.html"});
$routeProvider.when('/', { controller: "secondController",
templateUrl: "views/first.html"});
$routeProvider.when('/', { controller: "thirdController",
templateUrl: "views/first.html"});
});
controllers = {};
controllers.nextBackController = function($scope, $rootScope) {
//Simple controller for the next, back buttons so we just put it in app.js
};
app.controller(controllers);
firstController.js 将包含类似于:
controllers.firstController = function($scope) {
//Do our logic here!!!
};
问题是如果您注意到在 HTML 页面的顶部我必须加载所有控制器。这是不可扩展的。我希望每个控制器都在它自己的 JS 文件中,并且不必静态加载每个控制器,因为用户甚至可能永远不需要那个控制器。有没有办法在切换路由时动态加载实际的 JS 文件?或者我可以在“first.html”、“second.html”等的顶部粘贴一个脚本标签吗?
【问题讨论】:
-
你想做的正是我现在的做法。每个控制器都在自己的 JS 文件中。我加载它们的方式是:
app.controller("ControllerName", function () { /* Controller code */ });(因为您将应用程序模块存储在全局变量app中)。因此,我不使用app.controller(controllers) -
@lan 我的问题是如何在需要时提取控制器 JS 文件,而不是将它们全部放在脚本标签的主页顶部。假设我有 20 个控制器,每个组件一个。这将使加载时间变得可怕。我只想在需要时拉入 firstController 的 .JS。还是angular会自动搜索js文件??
-
特别是对于移动解决方案,您应该更好地连接所有脚本,缩小它们并仅加载一个 javascript 文件。在大多数情况下,这比加载许多小文件要快。延迟是你的敌人。
-
@user3621014 啊,好吧,我想我现在明白了,抱歉误会。如果您担心加载时间,可以随时考虑缩小、gzip 甚至捆绑(如果这是一个真正的问题)。
-
看看 mrgamer 创建的这个非常酷的示例项目。不会把它当作所有项目的圣杯,但对你能做什么有另一个看法是很酷的。在解决方案中,为了便于开发,所有内容都是分开的,但在构建阶段所有内容都被组合在一起......确实非常酷。制作一个非常快速和流畅的 SPA 应用程序github.com/mrgamer/angular-login-example.git
标签: javascript jquery html angularjs