此更改上下文及其未定义的angularjs

时间:2019-03-12 11:34:19

标签: angularjs scope this

我具有以下功能,并且由于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 个答案:

答案 0 :(得分:1)

问题是您将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
          }
        })
      }
    })
})()