Я пытаюсь добавить постоянный префикс для URL, поэтому я сделал:

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

Я попытался поместить весь URL в контроллер, и он работает, но я хочу манипулировать определенным префиксом URL для моего приложения.

0
FacundoGFlores 12 Дек 2016 в 21:23

3 ответа

Лучший ответ

Вставьте apiv1 константу так же, как вы вставили $http. См. Угловую внедрение зависимостей.

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);
    });
  }
}
3
Ori Drori 12 Дек 2016 в 18:25

Обратите внимание, что разрешение угловых зависимостей является устаревшим , а это означает, что там, где оно не способствует автоматическому связыванию данных и разрешению области действия, оно не должно использоваться. Поскольку вы уже используете 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`)

Это избавит от лишних инъекций, шума кода и облегчит ваш путь к будущим обновлениям.

1
Anatoly 12 Фев 2017 в 17:12

Чтобы использовать зарегистрированную константу (или службу, фабрику, поставщика и т. Д.), Вы должны ввести ее в свой контроллер. добавить 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;
1
Dustin Hodges 12 Дек 2016 в 18:26