В AngularJS, как изменить свойство сервиса из обратного вызова внутри самого сервиса

0

У меня есть фабрика, которая выполняет HTTP-вызов и в this.password = null вызове ошибки я хочу установить свойство значение, например this.password = null но this.password не указывает на пароль.

С другой стороны, когда я делаю POST, данные отправляются штрафом: password: this.password

Объем свойства пароля должен быть другим? Или мне что-то не хватает?

.factory('LogInService', function($http) {

  return {
    username: null,
    password: null,
    logIn: function() {
      return $http({
        method: 'POST',
        url: 'http://my-domain/api/signin',
        data: {
          username: this.username,
          password: this.password
        }
      })
      .then(
        function(success){

        },
        function(err){
          // reset password field
          this.password = null;  // <-- not working
        }
      );
    }
  }
});

Я мог бы установить все свойства и методы в var, а затем вернуть его, но я предпочел бы метод выше. Я имею в виду:

var myService = {
    // my property and methods...
}

errorCallBack = function(){
  myService.password = null;
}

return myService;
Теги:
angularjs-scope

2 ответа

2
Лучший ответ

У вас есть проблема. Должно быть достаточно легко сделать что-то подобное. Как всегда, непроверенный, но похоже, что это сработает.

.factory('LogInService', function($http) {

  return {
    username: null,
    password: null,
    logIn: function() {
      var svc = this; //<----
      return $http({
        method: 'POST',
        url: 'http://my-domain/api/signin',
        data: {
          username: svc.username, //<---
          password: svc.password  //<---
        }
      })
      .then(
        function(success){

        },
        function(err){
          // reset password field
          svc.password = null;  //<----
        }
      );
    }
  }
});
  • 0
    Я пытался с var _this = this; но до return , внутри функции logIn в logIn работает. Имеет смысл Спасибо
1

Вам нужно узнать об this.

Вы можете исправить свою проблему, используя функции стрелок, которые не меняют смысл this.

Вы можете захотеть использовать Babel для компиляции вашего ES6-кода в ES5, чтобы браузеры хорошо себя чувствовали в своей современной кодовой базе.

  • 0
    Широко ли поддерживаются функции стрелок в дикой природе?
  • 0
    Проверьте эту таблицу совместимости: kangax.github.io/compat-table/es6 . Вы можете использовать Babel или аналогичный инструмент для компиляции функций стрелок и другого современного синтаксиса в то, что понимают все браузеры.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню