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