angular - 使用Angular 7获取“无法读取未定义的属性'http'”
问题描述
我正在做一个 Angular 7 项目,我遇到了一个奇怪的问题,我花了相当长的时间来确定,但我不知道为什么会这样,我希望你们能帮助我。我使用 angular-cli 创建了一个服务,然后实现如下:
从'@angular/core'导入{Injectable}; 从“@angular/common/http”导入 {HttpClient}; 从“rxjs”导入{forkJoin,Observable}; 从“rxjs/operators”导入{map}; @可注射({ 提供在:“根” }) 导出类 SampleService { 构造函数(私有http:HttpClient){ } 保存(样本:样本):可观察的 { return this.http.post("http://localhost:3000/samples", sample).pipe(map(this.parser)); } saveAll(samples: Sample[]): Observable { 返回 forkJoin(samples.map(this.save)) } 私有解析器 = (value): Sample => new Sample(value.name); } 出口类样品{ 名称:字符串; 构造函数(名称:字符串){ this.name = 名称; } }
我在每个方法上都设置了一个断点。当我运行它时,我得到以下信息:
如您所见,第一个断点似乎一切正常,所以让我们进入下一个。
现在一切都未定义,我在控制台中收到以下错误:
错误类型错误:无法读取未定义的属性“http”
如果我改变这一行:
forkJoin(samples.map(this.save))
至
forkJoin(samples.map(sample => this.save(sample)))
当我重新运行代码时。我得到:
现在一切似乎都很好,代码运行良好。作为一个 java 开发人员,在类似的情况下,第一种方法可以与方法引用相媲美,它可以正常工作,为什么在 TypeScript 中它不能呢?
解决方案
this
是上下文的。使用定义定义的每个函数function
都有自己的this
. 箭头函数定义的不同之处在于,它将父上下文绑定到函数体,从而this
引用父this
。它类似于定义一个函数并将其显式绑定,如下所示:
function(doc){
//function body
}).bind(this)
推荐阅读
- activemq - ActiveMQ 消息包含 NULNULNUL#
- php - 如何从一个表中获取值并在另一表中插入相同的值
- reactjs - Redux saga:如何从另一个未启动的任务中取消一项任务?
- c - 如何通过在linux内核中创建文件来访问物理内存的值并存储该值
- html - 包含文本表单和文件选择的 html 换行
- netlify - 使用 Netlify CMS 为 Hugo 制作多语言内容文件夹模板
- python - NameError: name 'client' is not defined 我该如何解决这个问题?(不和谐机器人)
- android - 如何在android中处理已弃用的Handler
- html - 为什么其他检查的无线电输入和标签不起作用?
- javascript - 光滑的滑块响应问题