我想使用$ document从输入字段中获取服务器值.
var base_url = $document[0].getElementById('BaseUrl').value;
Run Code Online (Sandbox Code Playgroud)
基本URL用于抓取模板.
var base_url = $document[0].getElementById('BaseUrl').value;
$routeProvider.when('/alert', {
controller: function () { },
templateUrl: base_url + '/partials/instances.html'
});
Run Code Online (Sandbox Code Playgroud)
由于$ document会抛出一个错误,我不知道它在配置中是不可用的?有没有办法找出可用的和不可用的?我也可以使用$ http从服务器获取数据,但这也是不可用的.
pko*_*rce 16
AngularJS模块分两个阶段进行自举:
Configuration phase 只有提供者和常量可用的地方.Run phase基于注册提供商实例化服务的地方.在此阶段,常量仍然可用,但不是提供者.AngularJS 文档(部分:"模块加载和依赖关系")提供了对此的见解:
模块是配置和运行块的集合,它们在引导过程中应用于应用程序.在最简单的形式中,模块由两种块的集合组成:
配置块 - 在提供程序注册和配置阶段执行.只有提供程序和常量才能注入配置块.这是为了防止在完全配置服务之前意外实例化服务.
运行块 - 在创建注入器后执行并用于启动应用程序.只有实例和常量才能注入运行块.这是为了防止在应用程序运行时进一步进行系统配置.
鉴于上述情况,您只能注入常量和提供者(Provider在API文档中标有后缀).这可能会回答您的问题,但无法解决您的模板加载问题...
我想知道你是否不能简单地在HTML中使用基本标签然后只使用相对路径(到基地)而不指定绝对路径?就像(如果基础配置正确):
$routeProvider.when('/alert', {
controller: function () { },
templateUrl: 'partials/instances.html'
});
Run Code Online (Sandbox Code Playgroud)
小智 16
虽然这个问题已得到普遍回答,但这里有一点针对问题中使用的具体示例:
如何使用角度常量来定义部分的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'
})
;
}]);
Run Code Online (Sandbox Code Playgroud)
在我看来,这有几个好处:
通常,我不使用此解决方案与上面的硬编码值.这只是一个以最简单的方式展示要做什么的例子.为了能够在您的服务器上复制您的应用程序,请在索引文件中定义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>
[...]
Run Code Online (Sandbox Code Playgroud)
在app.js中:
// file: app.js
'use strict';
/* App Module */
angular.module( 'myApp', [] )
// define the templateBaseUrl using external appConfig
.constant( 'templateBaseUrl', myNS.appConfig.templateBaseUrl );
Run Code Online (Sandbox Code Playgroud)