Я делаю приложение 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 только один раз?
Чтобы выполнить http один раз, цель счетчика - проверить, загружаю ли я контроллер во второй раз, если это так, то http не должно происходить.


Это связано с тем, что каждый раз, когда вы посещаете свою страницу, область действия повторно инициализируется. И все значения, установленные в предыдущей области, установлены по умолчанию.
Что вы можете сделать для достижения желаемого, так это установить флаг на rootScope.
Внутри вашего контроллера что-то вроде
$rootScope.contadorInicioCtr++
И добавить чек на
if ( $rootScope.contadorInicioCtr===1){ ... }
Другой подход может быть
Создайте сервис для отправки ваших запросов и обновите флаг при отправке первого запроса. Теперь вы можете проверить наличие этого флага перед отправкой запроса.
Поскольку service в angular является одноэлементным, это не будет обновлять значение переменной и делать все это за вас.
Надеюсь это поможет
Спасибо
Сейчас у меня это работает, я попробую сделать service. Спасибо за помощь.
Рад это знать. Рассмотрите возможность проголосовать за ответ :)
это потому, что вы сбрасываете его обратно на 0 с помощью
contadorInicioCtr = 0. Было бы лучше, если бы вы могли описать, чего хотите достичь