【问题标题】:What is the best way to load a JSON file in typescript?在打字稿中加载 JSON 文件的最佳方法是什么?
【发布时间】:2016-10-03 13:46:52
【问题描述】:

我想在我用 typescript 编写的 angular2 应用程序中加载一个本地 JSON 文件以进行测试。我有 1) 包含 jQuery.d.ts 文件,并尝试使用 $.getJson() 2) 尝试使用带有 async:false 的 $.ajax()。这两个问题都是我不能调用回调函数之外的函数。

ngOnInit():any {
    $(document).ready(function(){
        $.ajax({
            async: false,
            url: "../jsonfile/guestRecommendations/1.json",
            dataType: "json",
            method: "GET",
            success: function (data) {
                this.hello();
            }
        });
        alert(this.json_data);
    })
    this.json_data = "before";
}

 hello(){
    alert("hello");
}

}

抛出此错误异常:TypeError:this.hello is not a function。 (在 'this.hello()' 中,'this.hello' 是未定义的)

我还注意到类型脚本中内置了一个名为 ajaxGetJSON 的函数。但是我的 IDE 没有提供有关如何使用此功能的文档,并且我无法在线找到它的文档。对这个问题的任何帮助都会很棒。

【问题讨论】:

  • 你可以使用$(document).ready(() => {success: (data) => {

标签: jquery json typescript angular


【解决方案1】:

错误是因为您使用的是胖函数而不是箭头函数:

success: (data) => {
  this.hello();
}

所以this关键字不对应组件本身...

话虽如此,我会使用 Angular2 的 Http 类来加载 JSON 文件:

constructor(private http:Http) {
}

ngOnInit():any {
  this.http.get('../jsonfile/guestRecommendations/1.json')
          .map(res => res.json())
          .subscribe((data) => {
            this.hello();
            alert(data);
          });
}

【讨论】:

  • 我已经尝试了你的第二个建议,打字稿编译器抛出错误错误:(28、14)TS2339:属性'map'在'Observable'类型上不存在。你知道这是为什么吗?
  • 需要导入算子。这个问题可以帮助你:stackoverflow.com/questions/34515173/….
  • 我添加了 import 'rxjs/add/operator/map';仍然得到错误。
  • 这个解决方案和另一个帖子一起解决了我的问题。 stackoverflow.com/questions/37618012/…
猜你喜欢
  • 2011-11-19
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 2021-06-26
  • 2019-07-11
  • 2021-08-05
  • 2016-09-12
相关资源
最近更新 更多