Angular Service未被命中,函数未定义TypeScript

时间:2018-10-01 11:14:03

标签: angular typescript

我创建了一个扩展方法。在该扩展方法中,我尝试使用httpClient调用Web API,但是正在调用HTTP的方法却给了我一个未定义的错误。

使用调试器时,我可以看到我的调试器没有进入该类,并且我不知道为什么。

注意:这是扩展方法,不是服务类

Extension.model.ts

declare global {
  interface Object {
    JsonServiceReceiver(): any[];
  }
}

class serviceChecker {

  constructor(private http: HttpClient) {}
  asd() {
    this.http.get('http://jsonplaceholder.typicode.com/posts').subscribe(data => {
      console.log(data);
    });
  }
}

Object.defineProperty(Object.prototype, 'JsonServiceReceiver', {

  value: function() {

    // according to my knowledge I am getting an error here, while object creation.

    let objservice: serviceChecker;
    objservice.asd();
  },
  enumerable: false
});

export {}
  

错误:ERROR类型错误:无法读取未定义的属性'asd'

这是我尝试从中调用扩展方法的文件:

app.component.ts

import { Component, OnInit } from '@angular/core';
import { Employee } from './Employee.model';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})

export class AppComponent {

  EmployeArray: Employee[] = [];

  submit() {
    this.EmployeArray = Object.JsonServiceReceiver();
    console.log("data", this.EmployeArray);
  }

}

我无法弄清楚自己在做什么错。同样,我不使用服务,而是在TypeScript中使用扩展方法。

1 个答案:

答案 0 :(得分:2)

这种构造:let objservice : serviceChecker;并不是真正地创建对象,而是将类型分配给变量。因此,变量 objservice 仅包含您的服务类型。要实际创建它,您需要使用let objservice = new serviceChecker()