为了账号安全,请及时绑定邮箱和手机立即绑定

使用angular2 http服务缓存结果

使用angular2 http服务缓存结果

互换的青春 2019-12-25 14:44:04
我通过服务公开了一个HTTP GET请求,并且几个组件正在使用此数据(用户的配置文件详细信息)。我希望第一个组件请求实际对服务器执行HTTP GET请求并缓存结果,以便后续请求将使用缓存的数据,而不是再次调用服务器。这是该服务的一个示例,您如何建议使用Angular2和Typescript实现此缓存层。import {Inject, Injectable} from 'angular2/core';import {Http, Headers} from "angular2/http";import {JsonHeaders} from "./BaseHeaders";import {ProfileDetails} from "../models/profileDetails";@Injectable()export class ProfileService{    myProfileDetails: ProfileDetails = null;    constructor(private http:Http) {    }    getUserProfile(userId:number) {        return this.http.get('/users/' + userId + '/profile/', {                headers: headers            })            .map(response =>  {                if(response.status==400) {                    return "FAILURE";                } else if(response.status == 200) {                    this.myProfileDetails = new ProfileDetails(response.json());                    return this.myProfileDetails;                }            });    }}
查看完整描述

3 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

关于您的最后一条评论,这是我想到的最简单的方法:创建一个具有一个属性并且该属性将保存请求的服务。


class Service {

  _data;

  get data() {

    return this._data;

  }

  set data(value) {

    this._data = value;

  }

}

就如此容易。plnkr中的其他所有内容都将保持不变。我从服务中删除了请求,因为它会自动实例化(我们不这样做new Service...,而且我不知道通过构造函数传递参数的简单方法)。


所以,现在,我们有了Service,我们现在要做的是在组件中发出请求并将其分配给Service变量 data


class App {

  constructor(http: Http, svc: Service) {


    // Some dynamic id

    let someDynamicId = 2;


    // Use the dynamic id in the request

    svc.data = http.get('http://someUrl/someId/'+someDynamicId).share();


    // Subscribe to the result

    svc.data.subscribe((result) => {

      /* Do something with the result */

    });

  }

}

请记住,我们的Service实例对于每个组件都是相同的,因此,当我们为其分配值时data,它将反映在每个组件中。

查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 1214 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信