我有一个名为abc的组件,在该组件中我有三个名为title,Desc,Name的变量,当我尝试从嵌套函数访问它时,它给我一个未定义的。
e.g。
@Component({
selector: 'abc',
templateUrl: './abc.component.html',
styleUrls: ['./abc.component.css'],
providers: [abcService]
})
export class abcComponent implements AfterViewInit,AfterViewChecked {
title;
Desc;
Name;
date=null;
test(){
this.title='a';
//work fine
}
test11(){
$('#cmg tbody').on('click', 'a.editor_edit', function (e) {
e.preventDefault();
this.title= false; //gives me an undefined
});
}
}
答案 0 :(得分:5)
这是因为您正在丢失回调中的范围。修改它以使用arrow function,以便保留this
$('#cmg tbody').on('click', 'a.editor_edit', (e) => {
e.preventDefault();
this.title= false;
});
在箭头函数之前,每个新函数都定义了自己的这个值 (构造函数中的新对象,在严格模式下未定义) 函数调用,如果函数被调用为基础对象 “对象方法”等)。事实证明这不太理想 面向对象的编程风格。