结束我之前的评论:
索引
<!doctype html>
<html ng-app="myapp">
<head>
<!--Head stuff-->
</head>
<body>
<div ng-view=""></div>
<!-- Scripts, other stuff -->
</body>
</html>
主脚本
'use strict';
angular
.module('myapp', [
//...
'ngRoute',
//...
])
.config(function (..., $routeProvider, ...) {
$routeProvider
.when('/404', {
templateurl: '404.html',
controller: 'ErrorCtrl',
controllerAs: 'errorCtrl',
title: 'You are lost'
})
.when('/', {
templateUrl: 'views/home.html',
controller: 'HomeCtrl',
controllerAs: 'homeCtrl',
title: 'Home'
})
.when('/contact', {
templateUrl: 'views/contact.html',
controller: 'ContactCtrl',
controllerAs: 'contactCtrl',
title: 'Contact Us'
})
.otherwise({
redirectTo: '/404'
});
//...
})
.run (function (...) {
//...
});
用法
<a href="/contact">Contact Us</a>
您将获取页面通用的所有基本模板代码并将其包含在索引中。基本上,不会改变的东西会一直存在。否则,将其从主页中取出,并将其放入带有自己控制器的模板文件中。或者,拥有一些共享控制器并仅将视图用作模板,然后将所有功能铲入指令中。我其实更喜欢后一种方法,但前一种方法如上所示。
这个解决方案值得注意的是页面实际上只加载了一次。由于每当您导航到不同的视图时都会停留在索引上,因此您只需从服务器获取新模板的 HTML 并将其注入到视图中(由 ngRoute 负责)。我相信默认情况下,您的 URL 中会包含一个 #,因此您可能希望在配置函数中启用 HTML5 模式。$locationProvider,然后添加以下行:
$locationProvider.html5Mode ({ enabled: true });
您还需要在索引文件的头元素中添加一个基:
<base href="/" />
家庭作业:Routes tutorial、HTML5 mode
如果您使用 Grunt,您可能还想查看 ngTemplates。它确实可以提高性能。