首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Angular无法在类中初始化服务(HttpClient)

Angular无法在类中初始化服务(HttpClient)
EN

Stack Overflow用户
提问于 2018-07-17 01:47:42
回答 1查看 1.3K关注 0票数 1

我想通过创建来自类的数据访问对象来隔离http交互,这样在组件中我就可以简单地获得如下数据:

代码语言:javascript
运行
复制
// dashboard.component
import { AppUser } from './appuser.service'

export class DashboardComponent implements OnInit {
  user: AppUser = new AppUser();

  constructor() { }

  ngOnInit() {
    let id = JSON.parse(window.localStorage.getItem('session')).userId;
    this.user.find(id) // 'find' is from base class
      .subscribe(
        // handle user data
      );
  }
}

我定义了一个基类和一个子类,如下所示:

代码语言:javascript
运行
复制
// base-resource.service
import { HttpClient } from '@angular/common/http';
...
export class BaseResource {
  private fullpath: string;
  protected http: HttpClient;

  constructor (path: string) {
    this.fullpath = path;
  }

  find (id): Observable<Object> {
    return this.http.get(this.fullpath + '/' + id); // this line throws Error!
  }
}

// app-user.service
...
export class AppUser extends BaseResource {
  constructor(data?) {
    super('api/appusers');
  }
}

但是,这会在基类函数中生成一个错误:ERROR TypeError: Cannot read property 'get' of undefined

我的'AppUser‘实例显然是从'BaseResource’继承了find,但是find选择了'AppUser‘实例,因为thishttp的值不可用。我曾尝试将http声明为公共和私有以及受保护的,但没有效果。我想我错过了一些关于如何扩展类的更大的图景。

具体地说,我想我的问题是,当函数需要访问基类的上下文时,如何将函数抽象为基类。

(使用Angular 6.0.4)

编辑我更新了标题,因为很明显这是在类中实例化HttpClient服务的问题。

EN

回答 1

Stack Overflow用户

发布于 2018-07-17 02:03:03

错误是因为没有实例化HttpClient,所以当您使用它时,它是未定义的。

您应该将HttpClient注入到AppUser中,并通过构造函数将其传递给BaseResource

代码语言:javascript
运行
复制
export class AppUser extends BaseResource {
  constructor(HttpClient http) {
    super(http, 'api/appusers');
  }
}

和base-resource.service中

代码语言:javascript
运行
复制
import { HttpClient } from '@angular/common/http';
...
export class BaseResource {
  private fullpath: string;
  protected http: HttpClient;

  constructor (httpClient: HttpClient, path: string) {
    this.fullpath = path;
    this.http = httpClient;
  }

  find (id): Observable<Object> {
    return this.http.get(this.fullpath + '/' + id); // this line throws Error!
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51367472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档