url的常量前缀

时间:2016-12-12 18:23:00

标签: javascript angularjs ecmascript-6

我正在尝试为网址添加常量前缀,所以我做了:

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

我尝试将整个网址放在控制器中并且它正常工作,但我想操作我的应用的特定网址前缀。

3 个答案:

答案 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`)

这样可以避免多余的注射,代码噪音,并简化您未来升级的道路。