如何从外部调用angular2组件方法并参考这个?

时间:2016-03-16 15:26:35

标签: angular angular2-services

我想从外部调用angular2服务的方法,并从该方法调用来自同一类的其他方法,或者可以访问构造中的变量。

我正在使用ngZone来创建一个可从外部访问的方法。我的班级看起来像这样:

var Component1 = ng.core.Class({
  constructor:[ng.core.NgZone, function(_ngZone) {
                    window.Component = {
                        onCallFromOutside: this.onCallFromOutside,
                        zone: _ngZone
                    };
                    this.some_var = "AAA";

                }],

  onCallFromOutside: function(){
    console.log("Called onCallFromOutside")
    console.log(this.some_var) // This is null
    this.inisdeCall() // Here I get error: EXCEPTION: TypeError: this.inisdeCall is not a function
  }
  inisdeCall: function(){
    console.log("Called inisdeCall")
  }

})

我从外面这样称呼这个方法:

window.Component.zone.run(function(){
    window.Component.onCallFromOutside(e);
})

这是我得到的错误:

EXCEPTION: TypeError: this.inisdeCall is not a function

我在纯JavaScript中使用angular2

1 个答案:

答案 0 :(得分:1)

这里的问题是您引用了一个函数,因此丢失了this实例。

您可以使用bind方法将函数绑定到this对象:

var Component1 = ng.core.Class({
  constructor:[ng.core.NgZone, function(_ngZone) {
    window.Component = {
      onCallFromOutside: this.onCallFromOutside.bind(this), // <-------
      zone: _ngZone
    };
    this.some_var = "AAA";
  }],
  (...)