2016-02-09 5 views
0

В следующих двух фрагментах встроенных внутри углового контроллера для входа в систему пользователь (не взяты из angular-meteor tutorial):Java-метод обратного вызова не обновляется AngularJS, если в сокращенном виде

this.login = function() { 
     Meteor.loginWithPassword(this.credentials.email, this.credentials.password, (err) => { 
      if (err) { 
       this.error = err.reason; 
      } 
      else { 
       $state.go('index'); 
      } 
     }); 
    }; 

и:

this.login = function() { 
     Meteor.loginWithPassword(this.credentials.email, this.credentials.password, function(err) { 
      if (err) { 
       this.error = err.reason; 
      } 
      else { 
       $state.go('index'); 
      } 
     }); 
    }; 

Первое приводит к тому, что AngularJS обновляет значение ошибки после обратного вызова, но второй фрагмент не вызывает обновление. Единственное различие заключается в использовании объявления стенографического метода в первом. Что является причиной этого?

+0

Пожалуйста, попка сценарий, как вы вызова этой функции? –

ответ

3

Это не только стенограмма, первый использует arrow function. Функции стрелки рассматривают свою область действия иначе, чем лямбда function.

Функции Arrow наследуют их родительскую область. Таким образом, нет необходимости связывать this внутри (для этого примера).

Если вы используете function лямбда, вы должны bindthis:

this.login = function() { 
     Meteor.loginWithPassword(this.credentials.email, this.credentials.password, function(err) { 
      if (err) { 
       this.error = err.reason; 
      } 
      else { 
       $state.go('index'); 
      } 
     }.bind(this)); 
    }; 

 Смежные вопросы

  • Нет связанных вопросов^_^