【问题标题】:Cannot Access this from nested function in angular4无法从 angular4 中的嵌套函数访问它
【发布时间】:2018-04-30 09:45:12
【问题描述】:

我有一个名为 abc 的组件,在该组件中我有三个名为 title、Desc、Name 的变量,当我尝试从嵌套函数访问它时,它给了我未定义的结果。

例如

@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
});

}

}

【问题讨论】:

  • 只是说,将 Angular 与 jQuery 混合并不是最佳实践。
  • 这只是因为 Angular 5 没有提供我想要的数据网格。

标签: javascript jquery angular angular5 angular2-services


【解决方案1】:

这是因为您在回调中丢失了范围。修改它以使用arrow function,以便您保留this

$('#cmg tbody').on('click', 'a.editor_edit', (e) => {
  e.preventDefault();
  this.title= false;
});

直到箭头函数,每个新函数都定义了自己的 this 值 (在构造函数的情况下是一个新对象,在严格模式下未定义 函数调用,如果函数被调用为基础对象 “对象方法”等)。事实证明,这并不理想 面向对象的编程风格。

【讨论】:

  • 与其依赖箭头函数的副作用,不如通过意图传递上下文。箭头函数在 IE 中也不起作用,这意味着使用“副作用”在那里不起作用。
  • @Nope ok ,有什么替代方法?
  • 它将与箭头函数 bcoz 一起使用 this 在箭头函数中指的是词法范围
  • @AnkitSatapara 箭头函数可以正常工作,尽管恕我直言,将它们用于事件处理程序似乎是一个奇怪的“解决方案”,因为this 应该指的是触发事件的元素,即:a.editor_edit
  • @Nope 好的,感谢您的解决方案
猜你喜欢
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 2016-05-28
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多