在Typescript

时间:2017-06-07 13:24:49

标签: javascript typescript

在Typescript中我试图用一些javascript代码读取XML文件,并使用以下代码将文本内容添加到局部变量中:

import { Injectable } from '@angular/core';

@Injectable()
export class JsonreaderService {    

private jsonText: string;

constructor() {
  this.readTextFile("../../assets/content.json");
}

readTextFile(file)
{
  let jsonText: string;
  var rawFile = new XMLHttpRequest();
  rawFile.open("GET", file, false);
  rawFile.onreadystatechange = function ()
  {
    if(rawFile.readyState === 4)
    {
      if(rawFile.status === 200 || rawFile.status == 0)
      {
        this.jsonText = rawFile.responseText;
      }
    }
  }
  rawFile.send(null);
}
}

我正在尝试将json文件中的文本分配给我的私有局部变量jsonText:this.jsonText = rawFile.responseText;,它们都是' string'。

当我尝试这个时,我得到错误:

  

财产' jsonText'类型' XMLHttpRequest'

上不存在

有人知道如何在打字稿中做到这一点吗?当我删除this.时,可以将responseText定义为函数readTextFile(file)中的jsonText变量

2 个答案:

答案 0 :(得分:2)

我想你应该在某个地方举办一个类的引用,比如:

import { Injectable } from '@angular/core';

@Injectable()
export class JsonreaderService {    

private jsonText: string;

constructor() {
  this.readTextFile("../../assets/content.json");
}

readTextFile(file)
{
  var self = this;
  let jsonText: string;
  var rawFile = new XMLHttpRequest();
  rawFile.open("GET", file, false);
  rawFile.onreadystatechange = function ()
  {
    if(rawFile.readyState === 4)
    {
      if(rawFile.status === 200 || rawFile.status == 0)
      {
        self.jsonText = rawFile.responseText;
      }
    }
  }
  rawFile.send(null);
}
}

答案 1 :(得分:2)

使用箭头功能保存this的范围:

readTextFile(file)
{
  let jsonText: string;
  var rawFile = new XMLHttpRequest();
  rawFile.open("GET", file, false);
  rawFile.onreadystatechange = () =>
  {
    if(rawFile.readyState === 4)
    {
      if(rawFile.status === 200 || rawFile.status == 0)
      {
        this.jsonText = rawFile.responseText;
      }
    }
  }
  rawFile.send(null);
}