我正在尝试为网址添加常量前缀,所以我做了:
import angular from 'angular';
import Home from './home/home';
import Login from './login/login';
let componentModule = angular.module('app.components', [
Home,
Login
]).constant('apiv1', 'http://localhost:56202/api/')
.name;
export default componentModule;
然后,我在控制器中写下以下内容:
class LoginController {
static $inject = ['$http'];
constructor($http) {
this.$http = $http;
this.name = 'login';
}
login(user) {
console.log(user.name);
console.log(user.password);
this.$http.get(apiv1 + 'clients').then(function (response) {
console.log(response.data);
});
}
}
export default LoginController;
但它给了我:
angular.js:14324 ReferenceError:未定义apiv1 LoginController.login
我尝试将整个网址放在控制器中并且它正常工作,但我想操作我的应用的特定网址前缀。
答案 0 :(得分:3)
以注入apiv1
的方式注入$http
常量。请参阅角度Dependency Injection文档。
class LoginController {
static $inject = ['apiv1', '$http'];
constructor(apiv1, $http) {
this.$http = $http;
this.apiv1 = apiv1;
this.name = 'login';
}
login(user) {
console.log(user.name);
console.log(user.password);
this.$http.get(this.apiv1 + 'clients').then(function (response) {
console.log(response.data);
});
}
}
答案 1 :(得分:1)
要使用已注册的常量(或服务,工厂,提供商等),必须将其注入控制器。即将apiv1添加到控制器的构造函数
class LoginController {
static $inject = ['$http', 'apiv1'];
constructor($http, apiv1) {
this.$http = $http;
this.apiv1 = apiv1;
this.name = 'login';
}
login(user) {
console.log(user.name);
console.log(user.password);
this.$http.get(this.apiv1 + 'clients').then(function (response) {
console.log(response.data);
});
}
}
export default LoginController;
答案 2 :(得分:1)
请考虑角度依赖性解析是 legacy ,这意味着,它不会导致自动数据绑定和范围解析 - 它不应该被使用。由于您已经在使用ES6,因此需要考虑以下事项:
/* your Config */
export const API_V1 = 'http://localhost:56202/api/'
/* your Controller */
import { API_V1 } from 'your-config'
/* your server call */
$http.get(`${API_V1}clients`)
这样可以避免多余的注射,代码噪音,并简化您未来升级的道路。