質問は一般的に回答されていますが、質問で使用されている具体的な例を対象とした少しの追加があります。
角度定数を使用してパーシャルの 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'
})
;
}]);
私の意見では、これにはいくつかの利点があります。
- ビューを移動する場合は、コードを 1 か所で更新するだけで済みます
- パーシャルがプロジェクト レイアウト内で深くネストされている場合、「templateBaseUrl」はパス全体ほど多くのノイズを引き起こしません。
- 相対パスと絶対パスの間で変更することもできます
- 同様の質問に対する回答では、html の base 要素を使用して、各 templateUrl の前に baseUrl を追加する必要をなくすことを提案しています。しかし、これは Web サイト上の他のすべてのリソースにも影響を与えました。テンプレートのベース 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 );