我正在制作AngularJS应用程序,并且我正在某些视图的控制器上发出http post请求,但我只希望它运行一次。我试过这样做。
aldro_app.controller('ctrInicio', function ($scope,$http, $rootScope) {
var contadorInicioCtr = 0;
contadorInicioCtr++;
console.log("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
?
这是因为每次访问页面时,范围都会重新初始化。并且在上一个范围内设置的所有值都设置为默认值。
要实现自己想要的,您可以做的是在rootScope
上设置一个标志。
在控制器内部,类似
$rootScope.contadorInicioCtr++
并添加检查
if ( $rootScope.contadorInicioCtr===1){ ... }
另一种方法是
创建用于发送请求的服务,并在首次发送请求时更新标志。现在,您可以在发送请求之前检查该标志。
由于角度中的service
是单例的,因此这不会更新变量的值并为您完成所有操作。
希望这有帮助
谢谢