Это изменение контекста, и это неопределенный angularjs - PullRequest
0 голосов
/ 12 марта 2019

У меня есть функция, как показано ниже, и у меня проблема из-за контекста this. Когда я запускаю свой код, в моей консоли появляется ошибка: Cannot set property 'cat' of undefined Когда я меняю this.cat на $scope.cat, все нормально. Я попытался добавить $ scope.apply и timeout, но это не работает. Кажется, что это изменение контекста, но я не знаю, как его исправить.

(function () {
    angular.module('test.module')
      .component('testComponent', {
        bindings: {},
        templateUrl: 'js/modules/test/test.html',
        controllerAs: 'vm',
        controller: (TestService, $scope) => {  

          TestService.changed(() => {
            const testValue = test.findById(id)

            if (testValue && testValue.data) {
              this.cat = testValue.data
            }
          })
       }
    })
  })()

1 Ответ

1 голос
/ 12 марта 2019

Проблема в том, что вы используете arrowFunction в качестве контроллера, поэтому this в этом случае будет функцией IFFE, которая упаковывает весь код.

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

(function() {
  angular.module('test.module')
    .component('testComponent', {
      bindings: {},
      templateUrl: 'js/modules/test/test.html',
      controllerAs: 'vm',
      controller: function(TestService, $scope) {

        TestService.changed(() => {
          const testValue = test.findById(id)

          if (testValue && testValue.data) {
            this.cat = testValue.data
          }
        })
      }
    })
})()
...