当前位置: 首页 > 知识库问答 >
问题:

Angular2.Provider/Service函数在调用表单组件时未定义

盛琪
2023-03-14

我正在做一个离子2项目。

这是我向本地API发出请求的提供者/服务...

import {Injectable} from 'angular2/core';
import {Http} from 'angular2/http';
import 'rxjs/add/operator/map';

@Injectable()
export class ServiceTest {
  // data: any = null;
  public data;

  constructor(public http: Http) {
    this.http = http;
    this.data = null;
  }

  retrieveData(){
    this.http.get('http://localhost:3000/people')
    .subscribe(res => {
      return this.data = res.text();
      // console.log(this.data);
    })
  }

  getData(){
    return this.data;
  }
}

组件的导出类:在控制台中返回undefined

export class Page1 {
  constructor(public data:ServiceTest) {
    this.data = data;
    console.log(this.data.retrieveData());
    console.log(this.data.getData());
  }
}

事情是这样的,当我从服务中执行console.log(this.data.text())时,一切都在控制台中正常输出。

共有1个答案

靳高明
2023-03-14

您的数据是异步加载的。所以我会这样更新您的代码:

@Injectable()
export class ServiceTest {
  (...)

  retrieveData(){
    return this.http.get('http://localhost:3000/people')
      .map(res => res.text())
      .do(data => {
        this.data = data;
      });
  }

在您的组件中:

export class Page1 {
  constructor(public data:ServiceTest) {
    this.data.retrieveData().subscribe(data => {
      console.log(data);
      console.log(this.data.getData());
    });
  }
}

以下是关于上面使用的运算符的一些解释:

    < li> map运算符:旨在将数据流中元素的值转换为其他值。见此链接:https://github . com/Reactive-Extensions/RxJS/blob/master/doc/API/core/operators/select . MD < li> do运算符:强制触发操作,而不更改数据流。请参见此链接:https://github . com/Reactive-Extensions/RxJS/blob/master/doc/API/core/operators/do . MD。

预订方法用于接收数据流上的结果/事件或错误/完成。

 类似资料:
  • 我有两个组件,如下所示,我想从另一个组件调用一个函数。这两个组件都包含在第三个父组件 using 指令中。 构成部分1: 我尝试过使用和但我不知道如何使用它以及如何调用该函数,任何人都可以帮忙吗?

  • 很好的一天。我正在尝试使用php和xampp创建一个登录表单来运行代码。我在phpMyAdmin中已经有一个数据库,我得到了这个错误 连接! 致命错误:未捕获错误:调用C:\xampp\htdocs\login\connection中未定义的函数mysql\u query()。php:34堆栈跟踪:#0{main}在C:\xampp\htdocs\login\connection中抛出。第34行的

  • 问题内容: 我试图在表单提交中调用特定的php函数,表单和php脚本都在同一页面中。我的代码如下(它不起作用,所以我需要帮助) 问题答案: 在下一行 该动作应该是脚本的名称,并且应该调用该函数,就像这样

  • As noted throughout this documentation, Flarum uses Laravel's service container (or IoC container) for dependency injection. Service Providers allow low-level configuration and modification of the Fla

  • 我目前正在写一个WoodPress插件,它可以与WooCommerce一起工作。我查询WooCommerce订单,目标是使用来自荷兰route planner服务的API,使用这些订单的地址来规划配送路线。 为我编写PHP已经有一段时间了,我最后一次编写PHP是在7年前,所以我的PHP技能有些生疏。 查询订单后,我想调用函数routexl_generate(),该函数在我的代码中定义。但是,运行此

  • 我一直得到这个错误: 致命错误:未捕获错误:调用未定义的函数mysqli_connect()在C:\Apache24\htdocs\asd.php: 2堆栈跟踪:#0{main}抛出在C:\Apache24\htdocs\asd.php在第2行 在任何php文件中运行任何mysqli cmd时,例如: 我已经在php中启用了扩展。ini文件,我一直在努力解决这个问题,但我就是做不到。任何帮助都将不