Запускать только один раз http-запрос

Я делаю приложение AngularJS и делаю HTTP-запрос на контроллеры некоторых представлений, но я хочу, чтобы он запускался только один раз. Я пробовал это делать.

aldro_app.controller('ctrInicio', function ($scope,$http, $rootScope) {

var contadorInicioCtr = 0;
contadorInicioCtr++;
 console.info("Contador -> " + contadorInicioCtr );
/* Http para retirar las ultimas facturas del contrato */
 var id = parseInt(getVariable("idcontrato"));
 var url = "http://api/url";
 if (contadorInicioCtr===1){
 $http({
     url : url,
     method: "POST",
     data: {id_contrato: id},
     headers:{
     "Content-Type":"application/json;charset=utf-8",
     "Authorization": "Bearer " + getVariable("token")
  }
 })
  .then(function(response){
       setVariable("facturas" , JSON.stringify(response.data));
 })
 }
});

Я пробовал использовать простой счетчик, но когда я перехожу к другому представлению и возвращаюсь к представлению ctrInicio, счетчик остается на 1, так что я могу сделать, чтобы запустить HTTP только один раз?

это потому, что вы сбрасываете его обратно на 0 с помощью contadorInicioCtr = 0. Было бы лучше, если бы вы могли описать, чего хотите достичь

Aleksey Solovey 12.04.2018 12:09

Чтобы выполнить http один раз, цель счетчика - проверить, загружаю ли я контроллер во второй раз, если это так, то http не должно происходить.

Jaime Cuellar 12.04.2018 12:14
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
1
2
294
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Это связано с тем, что каждый раз, когда вы посещаете свою страницу, область действия повторно инициализируется. И все значения, установленные в предыдущей области, установлены по умолчанию.

Что вы можете сделать для достижения желаемого, так это установить флаг на rootScope.

Внутри вашего контроллера что-то вроде

$rootScope.contadorInicioCtr++

И добавить чек на

if ( $rootScope.contadorInicioCtr===1){ ... }

Другой подход может быть

Создайте сервис для отправки ваших запросов и обновите флаг при отправке первого запроса. Теперь вы можете проверить наличие этого флага перед отправкой запроса.

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

Надеюсь это поможет

Спасибо

Сейчас у меня это работает, я попробую сделать service. Спасибо за помощь.

Jaime Cuellar 12.04.2018 12:52

Рад это знать. Рассмотрите возможность проголосовать за ответ :)

Muhammad Usman 12.04.2018 12:52

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