当前位置: 首页 > 面试题库 >

如何在Angle 2 Beta中的服务中有效使用Http Component?

商风华
2023-03-14
问题内容

我正在尝试使用 Angular 2-beta ,我想使用 Http 组件。但是这里有一个严重的问题:

我知道在Angular 2中(不同于Angular 1), Http 组件不是返回 Promise 的服务。它返回一个称为
Observable的 东西。我们知道,最好不要直接使用 Http 。高效的方法是制作一个负责使用 Http的服务
。但是如何?完成请求后是否应该返回承诺?

真的有道理吗?


问题答案:

Angular 2可以实现服务。它们仅对应于如下所述的可注射类。在这种情况下,此类可以注入到其他元素(如组件)中。

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

@Injectable()
export class CompanyService {
  constructor(http:Http) {
    this.http = http;
  }
}

您可以在引导应用程序的主要组件时Http指定的条件下(使用其构造函数)在其中注入对象HTTP_PROVIDERS

import {bootstrap} from 'angular2/platform/browser'
import {HTTP_PROVIDERS} from 'angular2/http';
import {AppComponent} from './app.component'

bootstrap(AppComponent, [
  HTTP_PROVIDERS
]);

然后可以将该服务注入到组件中,如下所述。不要忘记providers在组件列表中指定它。

import { Component, View, Inject } from 'angular2/core';
import { CompanyService } from './company-service';

@Component({
  selector: 'company-list',
  providers: [ CompanyService ],
  template: `
    (...)  `
})

export class CompanyList {
  constructor(private service: CompanyService) {
    this.service = service;
  }
}

然后,您可以实现一种利用Http服务中的对象的方法,并返回与您的请求相对应的Observable对象:

@Injectable()
export class CompanyService {
  constructor(http:Http) {
    this.http = http;
  }

  getCompanies() {
    return this.http.get('https://angular2.apispark.net/v1/companies/')
                  .map(res => res.json());
  }
}

然后,组件可以调用此getCompanies方法,并在Observable对象上预订回调,以便在响应存在时通知以更新组件的状态(与在Angular1中对promise所做的方式相同):

export class CompanyList implements OnInit {
  public companies: Company[];

  constructor(private service: CompanyService) {
    this.service = service;
  }

  ngOnInit() {
    this.service.getCompanies().subscribe(
      data => this.companies = data);
  }
}

编辑

正如foxx在他的评论中建议的那样,async管道还可以用于隐式订阅可观察对象。这是使用它的方法。首先更新您的组件,以将可观察对象放入您要显示的属性中:

export class CompanyList implements OnInit {
  public companies: Company[];

  constructor(private service: CompanyService) {
    this.service = service;
  }

  ngOnInit() {
    this.companies = this.service.getCompanies();
  }
}

然后在模板中使用异步管道:

@Component({
  selector: 'company-list',
  providers: [ CompanyService ],
  template: `
    <ul>
      <li *ngFor="#company of companies | async">{{company.name}}</li>
    </ul>
  `
})
export class CompanyList implements OnInit {
  (...)
}


 类似资料:
  • 我已经读了这些问题,但没有一个有效: Spring boot MVC -无法自动连接服务类中的存储库 为什么不能@Autowired a JPA存储库-Spring boot JPA JpaRepository在服务类中获取Null 还有这个:https://www.baeldung.com/spring-autowired-field-null 不幸的是,它们都不起作用。 我拥有的是: 服务接口

  • 问题内容: 我是Android开发的新手,我有一个用php制作的Web服务,现在我想在android中使用它,任何人都可以指导我如何实现这一目标。 我已经在网上尝试了许多代码示例,但未能实现此目标。我在ADT中使用Eclipse。 任何帮助都会得到应用。 问题答案: 请通过以下链接。您将在此处找到代码示例 http://www.anddev.org/calling_a_web_service_fr

  • 问题内容: 我已经能够让控制器将$ on侦听器与一起使用。 但我看不到任何有关如何获取服务以监听事件的文档。 我试过了,但是只允许一个听众。我希望多个服务中的侦听器,无论其父控制器是否在作用域内。 问题答案: 经过一番试验后,事实证明,使用最少的代码即可将事件发送到服务。 如果有其他人遇到此问题,请遵循示例服务代码。 该样本在获得相应广播后将服务模型保存并还原到本地存储中

  • 问题内容: 尽管这可能是Java Web Services的副本,但我想知道从哪里开始和继续。过去,我花了很多时间来找到从哪里开始,但我却没有。阅读有关Web服务的页面时,有很多术语和混乱(至少对我来说是如此!)。有很多术语- 例如Web Service和其他我不知道的术语。该用户组可以合并并提供易于理解和遵循的Java Web Services的高级概述吗?我感谢您的好意,并感谢您的帮助。 问题

  • 我已经创建了一个示例SOAP Web服务项目( 我能将应用程序部署到应用服务器,b 当我从一个浏览器访问WSDL使用WSDL你 是否因为对于SOAP请求,我需要在Security Config java文件的顶部包含任何拦截器。还是我在SOAP安全方面走错了路。有人能告诉我我错过了什么,或者给我指出正确的方向吗。令牌验证是WS-Security的一部分吗?或者Okta资源服务器中的身份验证管理器是

  • 我想在我的LibGDX Android游戏中使用Google Play Game Services API的成就和排行榜。我所做的唯一一件事就是从游戏服务开发者网站上获取运行的示例。我已经尝试在我的项目中使用这段代码很多天了,但仍然一无所获。我也尝试过学习本教程http://helios.hud.ac.uk/u1070589/blog/?p=202但我没有“主游戏类(从ApplicationLis