AngularJs区间仅显示{{name}}

时间:2016-09-08 08:39:55

标签: javascript angularjs django

我试图获取所有'现金流'我的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);
}]);

1 个答案:

答案 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因未解析的名称而停止。