Javascript 如何使用AngularJS为HTTP调用和图像加载设置基本URL
我一直在搜索,但到目前为止,我找不到处理以下情况的方法: 我想要一个代表我的域的变量,比如Javascript 如何使用AngularJS为HTTP调用和图像加载设置基本URL,javascript,html,angularjs,angularjs-scope,angularjs-factory,Javascript,Html,Angularjs,Angularjs Scope,Angularjs Factory,我一直在搜索,但到目前为止,我找不到处理以下情况的方法: 我想要一个代表我的域的变量,比如http://example.com/myserver/。我想访问的任何内容都将在该域中进行子定位。这种变量应该可以在所有服务中使用,也可以从HTML中使用(用于图像加载)。例如: angular.module('App', ['App.providers', 'App.services', 'App.controllers', 'App.directives']).run('EndpointFactory
http://example.com/myserver/
。我想访问的任何内容都将在该域中进行子定位。这种变量应该可以在所有服务中使用,也可以从HTML中使用(用于图像加载)。例如:
angular.module('App', ['App.providers', 'App.services', 'App.controllers', 'App.directives']).run('EndpointFactory', [function (EndpointFactory) {
EndpointFactory.BASE = 'http://www.example.com/mydata';
}]);
angular.module('App.services', []).factory('PrizeService', ['$http', 'EndpointFactory', function ($http, EndpointFactory) {
return {
index: function () {
return $http.post(EndpointFactory.BASE + '/prizes', {});
}
};
}]);
上面这个例子是我失败的试验之一。虽然我不喜欢每次服务都必须注入工厂的想法,但我愿意这样做,直到我面对
标签
<div>
<img ng-src="{{EndpointFactory.BASE + prize.imagePath}}" />
</div>
我无法从此指令访问EndpointFactory,我不希望必须将数据从工厂复制到每个控制器中的$scope
。您可以使用。注意以下几点
module.constant('BASE', 'http://example.com/myserver/');
然后可将该值注入任何位置,例如
module.factory('PrizeService', ['$http', 'BASE', function ($http, BASE) {
console.log(BASE) // -- http://example.com/myserver/
/*...*/
}]);
对于模板,您可以在run
块中的$rootScope
上使用此选项,以便在任何地方进行引用
module.run(['$rootScope' , 'BASE', function($rootScope, BASE) {
$rootScope.base = BASE;
}]);
或者,您当然可以将该常量注入并分配给各个作用域,而不是$rootScope
,但这听起来像一个全局值,可能是一个合适的匹配
-演示了$rootScope
和工厂价值注入
Angular6示例(我不确定它是否适用于AngularJs)
与你想要的有关,我发现这是最干净的方式。我希望这对你有意义,并为你节省一些时间。祝你好运
在共享文件夹中创建一个名为baseurl.ts的新文件,并按如下方式更新其内容:
export const baseURL = 'http://localhost:3000/';
. . .
import { baseURL } from './shared/baseurl';
. . .
providers: [
. . .
{provide: 'BaseURL', useValue: baseURL}
]
import { Component, OnInit, Inject } from '@angular/core';
. . .
constructor(private dishService: DishService,
@Inject('BaseURL') private BaseURL) { }
. . .
. . .
<img height="200px" src="{{BaseURL + dish.image}}" alt={{dish.name}}>
. . .
打开AppModule,导入baseURL并更新@NgModule装饰器的AppModule的providers属性,如下所示:
export const baseURL = 'http://localhost:3000/';
. . .
import { baseURL } from './shared/baseurl';
. . .
providers: [
. . .
{provide: 'BaseURL', useValue: baseURL}
]
import { Component, OnInit, Inject } from '@angular/core';
. . .
constructor(private dishService: DishService,
@Inject('BaseURL') private BaseURL) { }
. . .
. . .
<img height="200px" src="{{BaseURL + dish.image}}" alt={{dish.name}}>
. . .
更新菜单组件
打开menu.component.ts并按如下方式进行更新:
export const baseURL = 'http://localhost:3000/';
. . .
import { baseURL } from './shared/baseurl';
. . .
providers: [
. . .
{provide: 'BaseURL', useValue: baseURL}
]
import { Component, OnInit, Inject } from '@angular/core';
. . .
constructor(private dishService: DishService,
@Inject('BaseURL') private BaseURL) { }
. . .
. . .
<img height="200px" src="{{BaseURL + dish.image}}" alt={{dish.name}}>
. . .
打开menu.component.html并按如下方式进行更新:
export const baseURL = 'http://localhost:3000/';
. . .
import { baseURL } from './shared/baseurl';
. . .
providers: [
. . .
{provide: 'BaseURL', useValue: baseURL}
]
import { Component, OnInit, Inject } from '@angular/core';
. . .
constructor(private dishService: DishService,
@Inject('BaseURL') private BaseURL) { }
. . .
. . .
<img height="200px" src="{{BaseURL + dish.image}}" alt={{dish.name}}>
. . .
。
. . .
[参考]
这个例子来自Coursera.com