我试图获取所有'现金流'我的django应用程序中的对象通过每5秒调用一次AngularJS get函数。我用$ interval运行函数(getCashflows,5000);在我的js文件中并尝试在我的html中显示为[[getCashflows]](参见interpolateprovider)
现在我唯一得到的是" [[getCashflows]]"在我的html ..插值提供者不工作或我需要以不同的方式调用它吗?
app = angular.module("coco",[]);
app.config(function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
});
app.controller('cocoCtrl',['$scope','$http', function($scope) {
$scope.save = function (cashflow) {
var dataObj = {
value : cashflow.value,
date : cashflow.date,
};
$.ajax({
url : "/create_cashflow/", // view functie
type : "POST",
data : dataObj,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
success : function(json) {
$(".data").prepend("<li><strong>"+json.value+"</strong> - <em> "+json.date+"</em></li>");
}
});
}
}]);
app.controller('cocogetCtrl',['$scope','$http', function($scope,$http, $interval) {
$scope.cashflows = "";
$interval($scope.getCashflows = function() {
return $http.get("/get_cashflows/", {data:data}).then(function(response) {
$scope.cashflows = "test";
alert(response.toString());
$(".flows").prepend("<li><strong>"+json.value+"</strong> - <em> "+json.date+"</em></li>");
return response.toString();
});
}, 5000);
}]);
答案 0 :(得分:0)
您的问题几乎可以肯定是您尝试从jQuery回调更新角度范围变量。 Angular仅检查其自身摘要循环内范围的更改,并且回调将在该上下文之外发生,因此angular不会看到更改。
简单的解决方法是停止使用$.ajax()
来电,并开始使用已包含在控制器中的$http
服务。
然而,它根本不清楚您希望在HTML中看到的内容。函数getCashflows
不会以书面形式返回值,或者如果您重写它以使用$http
。该值是从服务器异步检索的。您应该更改它,以便范围值是一个解析为期望值的promise。由于$http
已经返回一个承诺,它应该足以执行以下操作:
function getCashflows() {
$scope.cashFlows = $http.get("/get_cashflows/", {data:data})
.then(function(response) {
return response.data;
});
}
更改html以插入值cashFlows
而不是函数。
getCashflows
本身可能没有理由将其暴露给范围,您可以将其设置为普通函数,其副作用是将$interval
的调用修复为当前正好导致javascript因未解析的名称而停止。