虽然这个问题已经得到了普遍的回答,但这里有一些针对问题中使用的具体示例的补充:
如何使用角度常量来定义部分的 baseUrl(或定义其他表示服务器值的常量并使它们可用于配置):
// file: app.js
'use strict';
/* App Module */
angular.module( 'myApp', [] )
// define the templateBaseUrl
.constant( 'templateBaseUrl', 'themes/angular/partials/' );
// use it in configuration
.config(['$routeProvider','templateBaseUrl', function($routeProvider,templateBaseUrl) {
$routeProvider
.when( '/posts', {
templateUrl : templateBaseUrl + 'post-list.html',
controller : PostListCtrl
})
.when( '/posts/:postId-:slug', {
templateUrl : templateBaseUrl + 'post-view.html',
controller : PostViewCtrl
})
.when( '/about', {
templateUrl : templateBaseUrl + 'about.html',
controller : AboutPageCtrl
})
.when( '/contact', {
templateUrl : templateBaseUrl + 'contact.html',
controller : ContactPageCtrl
})
.otherwise({
redirectTo: '/posts'
})
;
}]);
在我看来,这有几个好处:
- 如果你移动你的视图,你只需要在一个位置更新你的代码
- 如果您的部分内容深深嵌套在项目布局中,“templateBaseUrl”不会像整个路径那样引起太多噪音
- 您甚至可以在相对路径和绝对路径之间进行更改
- 对类似问题的回答建议使用 html 的基本元素来消除在每个 templateUrl 前添加 baseUrl 的需要。但这也影响了网站上的所有其他资源。仅配置模板的基本 url 没有副作用
通常,我不使用带有上述硬编码值的解决方案。这只是一个示例,以最简单的方式显示要做什么。为了能够在您的服务器上复制您的应用程序,请在您的索引文件中定义 app.js 之外的值并在服务器端生成必要的路径:
// file: index.php
<?php
// only depends on your project layout
$angularPartialsBaseUrl = 'themes/angular/partials/';
// this will change when you move the app around on the server
$themeBaseUrl = $_SERVER['REQUEST_URI'] . 'themes/angular';
?><!DOCTYPE html>
<html ng-app="myApp">
<head>
<title>Yii Blog Demo</title>
<script>
var myNS = myNS || {};
myNS.appConfig = myNS.appConfig || {};
myNS.appConfig.templateBaseUrl = '<?php echo $angularPartialsBaseUrl; ?>';
</script>
<script src="<?php echo $themeBaseUrl; ?>/js/vendor/angular/angular.js"></script>
<script src="<?php echo $themeBaseUrl; ?>/js/app.js"></script>
</head>
[...]
在 app.js 中:
// file: app.js
'use strict';
/* App Module */
angular.module( 'myApp', [] )
// define the templateBaseUrl using external appConfig
.constant( 'templateBaseUrl', myNS.appConfig.templateBaseUrl );