首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular 4/ TypeScript HttpModule在类中的应用

Angular 4/ TypeScript HttpModule在类中的应用
EN

Stack Overflow用户
提问于 2017-07-29 11:12:51
回答 1查看 478关注 0票数 1

我在Angular 4应用程序中有一个TypeScript类,我想这样做:

代码语言:javascript
复制
Import { Http } from '@angular/http';

export class Request {
  public url: string;
  public services: string;
  public regions: string;
  public start: Date;
  public end: Date;
  public output: string;

  constructor(private http: Http) {
    this.url = "https://someurl.com";
    this.services = "All";
    this.regions = "All";
    this.output = "json";
  }

  public Submit() {
    this.http.get(this.url).subscribe();
    ...
  }
}

这一切都很好,除了在组件中,我的模型的一部分是请求类

代码语言:javascript
复制
@Component({
selector: "app-request",
styleUrls: [
    './request.component.css'
],
templateUrl: './request.component.html'
})
export class RequestComponent implements OnInit {

  request: Request = new Request();

  ...
}

然后,该模板有几个如下所示的输入:

代码语言:javascript
复制
<select name="output" id="output" [(ngModel)]="request.output">
        <option *ngFor="let output of outputs" [ngValue]="output">{{output}}</option>
</select>

request对象有一组属性,这些属性被设置为ngModel的一部分,而且类对象有一个submit方法是很自然的,我可以直接从组件中调用它。但是,new Request()会失败,因为它期望Http模块对象作为参数。这种方法是不是不可行,或者我如何在这里将Http模块作为参数注入?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-29 23:27:16

理想情况下,您不应该将类和服务包装在一起(从维护的角度来看)。

然而,为了回答你的问题。你必须提出你的请求(混合服务??)一个带有注解@Injectable()的可注入模块,并通过将其提供到模块中来使其可访问。

代码语言:javascript
复制
Import { Http } from '@angular/http';
Import { Injectable } from '@angular/core';

@Injectable()
export class Request {
  public url: string;
  public services: string;
  public regions: string;
  public start: Date;
  public end: Date;
  public output: string;

  constructor(private http: Http) {
    this.url = "https://someurl.com";
    this.services = "All";
    this.regions = "All";
    this.output = "json";
  }

  public Submit() {
    this.http.get(this.url).subscribe();
    ...
  }
}

现在你可以在你的组件构造函数中获取实例了。

代码语言:javascript
复制
@Component({
selector: "app-request",
styleUrls: [
    './request.component.css'
],
templateUrl: './request.component.html'
})
export class RequestComponent implements OnInit {

  request: Request;

  constructor(
    request:Request){}

}

这是一个标准的角度特征。理想情况下,您应该使服务可注入。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45384861

复制
相关文章

相似问题

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