Используя $ watch в директиве angularjs, почему он работает только с функцией в качестве параметра - PullRequest
0 голосов
/ 03 июня 2019

Я исследую приложение angularjs, и я не понимаю, почему $ watch в директиве работает должным образом только с функцией в первом параметре.

class PaginationController {
  constructor($scope) {
    "ngInject";
    this.quantity = null;
    this.$scope = $scope;

    $scope.$watch(() => this.quantity, function (newValue, OldValue) {
      console.log('new: ' + newValue);
      console.log('old: ' + OldValue);
    });
  }
}

Если я просто использую this.quantity в качестве первого параметра, $ watch не улавливает изменения. Но с функцией все работает, как я ожидал. Какая разница?

1 Ответ

0 голосов
/ 03 июня 2019

Вы не можете передать переменную в $ watch, так как вы просто передадите значение переменной, как для любой функции JS:

a = 5; console.log(a); соответствует console.log(5)

И так this.quantity = 1; $scope.$watch(this.quantity)то же самое, что и $scope.$watch(1) и не имеет смысла.

То, что вы можете сделать, это передать имя области видимости переменной: $scope.$watch('$ctrl.quantity', ... (если $ ctrl является ref вашего контроллера)

Для получения дополнительной информации,см.

...