首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AngularJs间隔仅显示{{name}}

AngularJs间隔仅显示{{name}}
EN

Stack Overflow用户
提问于 2016-09-08 16:39:55
回答 1查看 37关注 0票数 0

我试图通过每5秒调用一次AngularJS get函数来获取我的django应用程序中所有“cashflow”对象的列表。我在js文件中使用$interval(getCashflows,5000);运行函数,并尝试在html中将其显示为[getCashflows]

现在我得到的唯一的东西是"[getCashflows]“在我的html..是interpolateProvider无法工作,还是我需要以不同的方式调用它?

代码语言:javascript
运行
复制
 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);
}]);
EN

Stack Overflow用户

发布于 2016-09-08 16:46:01

您的问题几乎可以肯定是您试图从jQuery回调中更新角度范围变量。Angular只在自己的摘要循环中检查作用域的更改,回调将发生在该上下文之外,因此angular看不到更改。

简单的解决方法是停止使用$.ajax()调用,并开始使用控制器中已经包含的$http服务。

然而,它完全不清楚您期望在html中看到的内容。函数getCashflows不会返回值,无论是按原样编写,还是在使用$http重写时都是如此。该值是从服务器异步检索的。您应该对其进行更改,以便作用域的值是解析为期望值的promise。因为$http已经返回了一个promise,所以做如下操作就足够了:

代码语言:javascript
运行
复制
function getCashflows() {
   $scope.cashFlows = $http.get("/get_cashflows/", {data:data})
   .then(function(response) {
       return response.data;
   });
}

更改您的html以插入值cashFlows而不是函数。

可能没有理由让javascript本身暴露在作用域中,你可以让它成为一个普通的函数,这样做的副作用就是修复对$interval的调用,该调用目前只会导致getCashflows由于未解析的名称而停止。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39386309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档