Могу ли я хранить данные в памяти по httpget?

Я вызываю данные с сервера через вызов API при изменении страницы сетки. При вызове этого метода я динамически получаю схему таблицы для всех столбцов и выполняю с ней другую работу на угловой стороне.

Проблема в том, что мне нужно получить данные из этой таблицы только один раз.

Как я могу хранить данные в памяти, чтобы, если пользователь изменяет страницу на стороне клиента, мне не приходилось снова обращаться к базе данных только для того, чтобы получить данные схемы?

 [Route("api/MyRoute/GetData/{Skip}/{Take}")]
        [HttpGet]
        [AllowAnonymous]
        public HttpResponseMessage GetData(string Skip, string Take)
        {
            try
            {
                if (Result == null)
                {
                    Result = DynamicSqlQuery(Convert.ToInt32(Skip), Convert.ToInt32(Take));
                }
}
0
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы не хотите сохранять данные на стороне angular, вы можете использовать службу, в которой вы выполняете http-вызов, например

dataStructure = [];

getDataStructure() {

   if (this.dataStructure) {
      return this.dataStructure;
   }else{

  return this.http.get<any>(
           this.url + 'values',
                { headers: headers }
              ).pipe( 
                tap( data => this.cachedData = data )
              );

   }                        
}

tap не будет подписываться, вы подписываетесь как обычно в своем компоненте, когда данные поступают, tap сохраняет копию в памяти, поэтому следующий вызов возвращает эту копию.

См. Пример в SB (вариант 12): https://stackblitz.com/edit/angular-rb5vmu

в журнале видно, что сначала вызов поступает с сервера, а затем - из кеша.

Другие вопросы по теме