使用angular2 http服务缓存结果

我通过服务公开了一个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;

                }

            });

    }

}


互换的青春
浏览 1215回答 3
3回答

翻过高山走不出你

关于您的最后一条评论,这是我想到的最简单的方法:创建一个具有一个属性并且该属性将保存请求的服务。class Service {  _data;  get data() {    return this._data;  }  set data(value) {    this._data = value;  }}就如此容易。plnkr中的其他所有内容都将保持不变。我从服务中删除了请求,因为它会自动实例化(我们不这样做new Service...,而且我不知道通过构造函数传递参数的简单方法)。所以,现在,我们有了Service,我们现在要做的是在组件中发出请求并将其分配给Service变量 dataclass 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,它将反映在每个组件中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

AngularJS